【发布时间】:2016-07-03 10:39:43
【问题描述】:
我创建了背景为红色的基本视图。我在我的活动中使用该视图。我已将 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;
}
提前感谢
【问题讨论】:
-
为什么不用
v.invalidate()方法重绘? -
@mehd azizi 我尝试在动画后通过 ontouch 方法获得的视图上进行 ivalidate,但它不起作用。它只是将整个视图拖到新位置,它不像地图那样重绘
标签: java android android-view