Android开发Android开发

Android 触摸点击效果

2018-12-28  本文已影响6人  房嘻

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

/**
 * 触摸点击基类
 */
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));
上一篇下一篇

猜你喜欢

热点阅读