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)
,是的,但是从哪里开始,以及用于完成的条件是什么?上次事件发生后的系统时间还是另一种解决方案?