我在基本视图中创建了背景中的红色。我在我的活动中使用该视图。我将setOnTouch列表器放到同一视图中。 在触摸事件上,我正在移动这种观点。
Before touch event it looks like this
After MotionEvent.ACTION_MOVE it look like this
在运动事件之后,我希望重新绘制视图。我不希望显示白色部分。
它应该像谷歌地图一样在任何方向移动地图上重绘它。
以下代码属于我的基本自定义视图
public class CustomVIew extends View {
public CustomVIew(Context context) {
super(context);
}
public CustomVIew(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomVIew(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.RED);
}
}
这是我的OnTouch方法实现
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
_xDelta = v.getX() - event.getRawX();
_yDelta = v.getY() - event.getRawY();
Log.d(TAG, "onTouch: X:" + _xDelta + " Y:" + _yDelta);
break;
case MotionEvent.ACTION_MOVE:
v.animate()
.x(event.getRawX() + _xDelta)
.y(event.getRawY() + _yDelta)
.setDuration(10)
.start();
break;
default:
return false;
}
return true;
}
提前完成
答案 0 :(得分:1)
您可能需要使视图无效。
这有助于: When it's necessary to execute invalidate() on a View?
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
_xDelta = v.getX() - event.getRawX();
_yDelta = v.getY() - event.getRawY();
Log.d(TAG, "onTouch: X:" + _xDelta + " Y:" + _yDelta);
break;
case MotionEvent.ACTION_MOVE:
//do something like change the picture
v.invalidate();
break;
default:
return false;
}
return true;
}