package com.lesgens.blindr.views; import java.util.ArrayList; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.util.AttributeSet; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.lesgens.blindr.ImageViewerActivity; import com.lesgens.blindr.R; public class SlideshowView extends RelativeLayout implements OnClickListener { private int mSelectedColor; private int mCurrentColor; private int mUnselectedColor; private int mPicturesWidth; private int mPicturesHeight; private int mSelectedItem; private int mDotsSize; private LinearLayout mPicturesContainer; private LinearLayout mDotsContainer; private ArrayList<Bitmap> mImages; public SlideshowView(Context context) { super(context); initViews(); } public SlideshowView(Context context, AttributeSet attrs) { super(context, attrs); initAttrs(attrs); initViews(); } public SlideshowView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initAttrs(attrs); initViews(); } public void addPicture(Bitmap bitmap){ mPicturesContainer.addView(createImageViewFromBitmap(bitmap)); //mDotsContainer.addView(createDot()); mImages.add(bitmap); invalidate(); requestLayout(); } public void recycleBitmaps(){ for(Bitmap b : mImages){ b.recycle(); } } public void addPicture(int resourceId){ Bitmap bm = BitmapFactory.decodeResource(getResources(), resourceId); addPicture(bm); } private ImageView createImageViewFromBitmap(Bitmap bitmap){ ImageView iv = new ImageView(getContext()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(mPicturesWidth, mPicturesHeight); iv.setLayoutParams(params); iv.setScaleType(ImageView.ScaleType.CENTER); iv.setTag(mImages.size()); iv.setImageBitmap(bitmap); iv.setOnClickListener(this); return iv; } private TextView createDot(){ TextView tv = new TextView(getContext()); tv.setText("."); tv.setTextSize(mDotsSize); tv.setTextColor(mUnselectedColor); return tv; } public int getSelectedItem(){ return mSelectedItem; } public Bitmap getSelectedImage(){ return mImages.get(mSelectedItem); } public void select(int item){ if(item < mImages.size()){ for(int i = 0 ; i < mPicturesContainer.getChildCount() ; i++){ mPicturesContainer.getChildAt(i).setBackgroundColor(0); } for(int i = 0 ; i < mDotsContainer.getChildCount() ; i++){ ((TextView) mDotsContainer.getChildAt(i)).setTextColor(mUnselectedColor); } mPicturesContainer.getChildAt(item).setBackgroundColor(mSelectedColor); //((TextView) mDotsContainer.getChildAt(item)).setTextColor(mSelectedColor); mSelectedItem = item; } } private void initViews() { View view = inflate(getContext(), R.layout.slideshow, this); mPicturesContainer = (LinearLayout) view.findViewById(R.id.pictures_container); mDotsContainer = (LinearLayout) view.findViewById(R.id.dots_container); mDotsContainer.setPadding(0, -mDotsSize*2, 0, 0); mImages = new ArrayList<Bitmap>(); mSelectedItem = -1; } private void initAttrs(AttributeSet attrs){ TypedArray a = getContext().getTheme().obtainStyledAttributes( attrs, R.styleable.SlideshowView, 0, 0); try { mSelectedColor = a.getColor(R.styleable.SlideshowView_selectedColor, Color.BLACK); mUnselectedColor = a.getColor(R.styleable.SlideshowView_unselectedColor, Color.WHITE); mCurrentColor = a.getColor(R.styleable.SlideshowView_currentColor, Color.GRAY); mPicturesWidth = a.getDimensionPixelSize(R.styleable.SlideshowView_picturesWidth, LayoutParams.WRAP_CONTENT); mPicturesHeight= a.getDimensionPixelSize(R.styleable.SlideshowView_picturesHeight, LayoutParams.WRAP_CONTENT); mDotsSize = a.getDimensionPixelSize(R.styleable.SlideshowView_dotsSize, 72); } finally { a.recycle(); } } @Override public void onClick(View v) { if(v instanceof ImageView){ select((Integer) v.getTag()); ImageViewerActivity.show(getContext(), getSelectedImage()); } } }