Gallery 的用法很简单,百度一下一大堆。现在就结合1个效果的例子。
这个效果其实很简单,设置未被选中的项,的透明度 周围的看起来就会有点模糊
android:unselectedAlpha="0.5"
设置好每个item的间隔
android:spacing="15dip"
每个item 的样子 就需要自己设置。比如利用 渲染器等各种效果
实现思路就是 在 onItemSelected 中监听 选中状态 动态的去改变 每个item的样子
部分代码:
public class BitmapUtil {
public static Bitmap createTxtImage(String txt, int txtSize) {
/**
* 未选中的 item 进行字体的设置
*/
Bitmap btimap = Bitmap.createBitmap(txt.length() * txtSize + 6,
txtSize + 6, Config.ARGB_8888);
Canvas canvas = new Canvas(btimap);
Paint p = new Paint();
p.setAntiAlias(true);
p.setColor(Color.WHITE);
p.setTextSize(txtSize);
canvas.drawText(txt, 3, txtSize - 3, p);
return btimap;
}
/**
* 图片倒影的效果
*/
public static Bitmap createReflectedImage(Bitmap bitmap) {
//中间
final int reflectionGap = 0 ;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
//整个 bitmap
Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
(height + height/2 + 20 ), Config.ARGB_8888);
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(bitmap,
0 , height / 2, width , height / 2, matrix, false);
Canvas canvas = new Canvas(bitmapWithReflection);
//正面的
canvas.drawBitmap(bitmap,0 , 20, null);
// draw 倒影
Paint defaultPaint = new Paint();
canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap + 20 , null);
Paint paint = new Paint();
//线性渲染器
LinearGradient shader = new LinearGradient(0,
bitmap.getHeight()+30, 0, bitmapWithReflection.getHeight()
+ reflectionGap,0x70ffffff, 0x00ffffff, TileMode.CLAMP);
paint.setShader(shader);
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
canvas.drawRect(0, height + 20, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}
}
adapter
public class GalleryAdapter extends BaseAdapter{
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
if (select == position) {
Entity en = entity_list.get(position % entity_list.size());
imageView.setImageBitmap(BitmapUtil.createReflectedImage(BitmapUtil
.createTxtImage(en.getName(), 30)));
} else {
Entity en = entity_list.get(position % entity_list.size());
imageView.setImageBitmap(BitmapUtil.createTxtImage(en.getName(),
25));
}
return imageView;
}
}
public class MyGalleryWight extends Gallery {
public MyGalleryWight(Context context, AttributeSet attrs) {
super(context, attrs);
}
// 这个是为了不让他一下滑动好多 你也可以不重写这个方法
public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
}
主要访法
@Override
public void onItemSelected(AdapterView<?> arg0, View view, int position,
long arg3) {
// TODO Auto-generated method stub
adapter.notifyDataSetChanged(position);//arg2会返回当前选中项的位置,调用此方法,通知更新
}
代码: http://download.csdn.net/detail/kongbaidepao/6640881