在android开发中,我们经常要用到选择器,当你给每个控件写选择器的时候,你是否会感觉好麻烦..每个点击事件都要写个选择器..
上面是大概的效果截图,说白了就是选择器的功能.
由于我现在使用的是图片控件来实现的..现在很多点击效果都是用图片来实现的,很少用图片按钮,所有我们使用继承系统的图片控件进行重写添加选择器的功能.
下面开始撸代码
MyImageView .java
public class MyImageView extends android.support.v7.widget.AppCompatImageView{
private static String TAG = "MyImageView";
private int pressId;
private int srcId;
public MyImageView(Context context) {
this(context, null);
}
public MyImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
int count = attrs.getAttributeCount();
for (int i = 0; i < count; i++) {
String attrName = attrs.getAttributeName(i);//获取属性名称
switch (attrName) {
//根据属性获取资源ID
case "press":
pressId = attrs.getAttributeResourceValue(i, 0);
break;
case "src":
srcId = attrs.getAttributeResourceValue(i, 0);
break;
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
//按下
case MotionEvent.ACTION_DOWN:
if (pressId != 0)
this.setImageResource(pressId);
break;
//移动
case MotionEvent.ACTION_MOVE:
break;
//抬起
case MotionEvent.ACTION_UP:
if (srcId != 0)
this.setImageResource(srcId);
break;
}
return super.onTouchEvent(event);
}
}
由于使用了自定义属性,所以还需要一个
image.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="image">
<attr name="press" format="integer" />
</declare-styleable>
</resources>
下面看看引用:
可以看到,引用的时候,控件需要使用我们自定义的view
然后增加一个image的属性.press就是按下时需要展示的图片,直接设置即可.
自定义的属性名称都可以按照自己喜欢的名字进行修改.当然 press这个属性需要与java代码中对应.
其他使用方法就是和图片的imageView一样.
这个只给出了一个图片控件的demo,其他控件也可以依葫芦画瓢进行自定义..
由于自定义view比较简单,就不再进行过多的解释.
欢迎带地址转发..谢谢!