如何实现Android Kitkat搜索等触摸反馈?

时间:2013-12-04 14:51:30

标签: android android-animation ontouchevent

Android Kitkat为搜索栏提供了非常好的触摸反馈。我需要实现类似的反馈,但对于ViewGroup。

我已经为测试编写了这段代码:

public class CircleLayout extends RelativeLayout {
    float x, y;
    boolean handled = false;
    Paint paint;

    public CircleLayout(Context context) {
        this(context, null);
    }

    public CircleLayout(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CircleLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        paint  = new Paint();
        paint.setColor(0x44FFFFFF);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if(handled) {
            canvas.drawCircle(x, y, 50, paint);
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        x = event.getX();
        y = event.getY();
        if(!handled) {
            handled = event.getAction() == MotionEvent.ACTION_DOWN;
        } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
            handled = false;
        }
        ViewCompat.postInvalidateOnAnimation(this);
        return super.onTouchEvent(event);
    }
}

它可以工作,但前提是子视图不拦截触摸事件。所以,我的第一个问题是 - 如何处理所有触摸事件,不要为子视图拦截它们。

我想在手指向上添加一些淡化效果。使用ViewCompat.postInvalidateOnAnimation(View)paint.setOpacity(int),是的,但是从哪里开始,以及用于完成的条件是什么?上次事件发生后的系统时间还是另一种解决方案?

Search bar in the Kitkat

0 个答案:

没有答案