本文总结了ImageView 开发过程中,用到效果总结
下面是示例效果图
实现过程说明:
Step One 设置ImageView 带一定宽度的Padding,同时设置android:adjustViewBounds 为True
<ImageView android:background="@drawable/img_on" android:id="@+id/imageViewt" android:adjustViewBounds="true" android:padding="2dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/icon" />
Step Two 设置 图片背景
xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:useLevel="false"> <corners android:radius="5dp" /> <gradient android:startColor="#848484" android:centerColor="#848484" android:useLevel="false" android:type="linear" android:angle="90" android:endColor="#848484"> gradient> shape>
实现过程说明:
使用设置图片对象的ColorFilter属性,把ColorMatrixColorFilter设置灰度通道,传递到ColorFilter属性中
注意两点:1 图片滤镜效果,只是在图层上面 加了一层效果,不是对图片的实际修改
2 如果对单个图片加滤镜效果后,其他地方使用到这个图片也会变成带滤镜效果。
下面是实际实现代码
public final float[] BT_SELECTED = new float[] {1,0,0,0,99,0,1,0,0,99,0,0,1,0,99,0,0,0,1,0}; public final float[] BT_NOT_SELECTED = new float[] {1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0};; public final static float[] BT_SELECTED1 = new float[] { 0.338f, 0.339f, 0.332f, 0, 0, 0.338f, 0.339f, 0.332f, 0, 0, 0.338f, 0.339f, 0.332f, 0, 0, 0, 0, 0, 1, 0 }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView ib2; ib1 = (ImageView) findViewById(R.id.imageViewt); ib2 = (ImageView) findViewById(R.id.imageView2); ib1.setOnTouchListener(new ImageView.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { ib1.setImageResource(R.drawable.icon1); ib1.getDrawable().setColorFilter( new ColorMatrixColorFilter(BT_SELECTED)); ib1.setImageDrawable(ib1.getDrawable()); } else if (event.getAction() == MotionEvent.ACTION_UP) { ib1.getDrawable().clearColorFilter(); ib1.getDrawable().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED)); ib1.setImageResource(R.drawable.icon2); } return false; } }); }