package com.ljp.laucher.path; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuffXfermode; import android.graphics.Shader.TileMode; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; import com.ljp.laucher.util.Configure; import com.ljp.laucher.util.ImageOperation; public class ImageAdapter extends BaseAdapter { private Context mContext; private Integer[] mImageIds; public ImageAdapter(Context c, Integer[] ImageIds) { mContext = c; mImageIds = ImageIds; } public Bitmap createReflectedImages(int id) { final int reflectionGap = 4; Bitmap originalImage = ImageOperation.readNoImageBitmap(mContext, id); int width = originalImage.getWidth(); int height = originalImage.getHeight(); Matrix matrix = new Matrix(); matrix.preScale(1, -1); Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2, width, height / 2, matrix, false); Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888); Canvas canvas = new Canvas(bitmapWithReflection); canvas.drawBitmap(originalImage, 0, 0, null); Paint deafaultPaint = new Paint(); deafaultPaint.setAntiAlias(false); canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null); Paint paint = new Paint(); paint.setAntiAlias(false); LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.MIRROR); paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode( android.graphics.PorterDuff.Mode.DST_IN)); canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint); return bitmapWithReflection; } @SuppressWarnings("unused") private Resources getResources() { return null; } public int getCount() { return mImageIds.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView iv = new ImageView(mContext); iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); iv.setLayoutParams(new Gallery.LayoutParams(Configure.getScreenWidth((Activity) mContext)/2, Configure.getScreenHeight((Activity) mContext)/2)); iv.setImageBitmap(createReflectedImages(mImageIds[position])); return iv; } public float getScale(boolean focused, int offset) { return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset))); } }