Android 触摸点击效果

触摸点击效果基类代码如下:

/**
 * 触摸点击基类
 */
public abstract class BaseTouchListener implements View.OnTouchListener{

    protected boolean hasPerformedActionUp = false;

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            //按钮点击时触发点击效果
            actionDown(v);
            hasPerformedActionUp = true;
            v.getParent().requestDisallowInterceptTouchEvent(true);
        }
        if (event.getAction() == MotionEvent.ACTION_MOVE && hasPerformedActionUp) {
            float offsetX = event.getX();
            float offsetY = event.getY();
            //触摸区域超出view范围时取消点击效果
            if ((offsetX < 0 || offsetY < 0 || offsetX > v.getWidth() || offsetY > v.getHeight())) {
                actionUp(v);
                hasPerformedActionUp = false;
                v.getParent().requestDisallowInterceptTouchEvent(false);
            }
        }
        if (event.getAction() == MotionEvent.ACTION_UP && hasPerformedActionUp) {
            //按钮松开时取消效果
            actionUp(v);
        }
        return false;
    }

    //取消点击效果
    protected abstract void actionUp(View view);

    //点击效果(比如缩放,高亮,替换背景等等)
    protected abstract void actionDown(View view);
}

示例点击缩放代码

public class TouchScaleListener extends BaseTouchListener {

    private float fromScale = 1.0F;
    private float toScale = 0.9F;

    public TouchScaleListener() {
    }

    public TouchScaleListener(float fromScale, float toScale) {
        this.fromScale = fromScale;
        this.toScale = toScale;
    }

    public TouchScaleListener(float toScale) {
        this.toScale = toScale;
    }

    @Override
    protected void actionDown(View view) {
        scaleXY(view, fromScale, toScale);
    }

    @Override
    protected void actionUp(View view) {
        scaleXY(view, toScale, fromScale);
    }

    private void scaleXY(View object, float fromValues, float toValues) {
        PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("scaleX", fromValues, toValues);
        PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleY", fromValues, toValues);
        ObjectAnimator objectAnim = ObjectAnimator.ofPropertyValuesHolder(object, pvhX, pvhY);
        objectAnim.setDuration(25L);
        objectAnim.start();
    }
}

代码调用

//按钮点击后缩小
button.setOnTouchListener(new TouchScaleListener(0.90f));
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,267评论 4 61
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 每一个人都会有缺陷,就像被上帝咬过的苹果。有的人缺陷比较大,正是因为上帝特别喜欢他的芬芳。 ...
    一枚大西瓜阅读 121评论 0 0
  • 1. 说一说你平时写代码遵守的编码规范 我是借鉴腾讯AlloyTeam团队代码规范 再结合公司以前定制的方案 编...
    在乎者也阅读 181评论 0 0
  • 时代在更迭变换,飞速的发展,新事物总会取代旧事物。就像以前的互联网,阿里巴巴,淘宝。 刚刚上市的时候,很多人都说马...
    柒柒猫1343阅读 501评论 6 8