android 开发程序员Android知识Android开发

自定义ImageView添加按下效果

2017-08-20  本文已影响0人  芯_空

在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比较简单,就不再进行过多的解释.
欢迎带地址转发..谢谢!

上一篇下一篇

猜你喜欢

热点阅读