gpt4 book ai didi

java - 在 MotionEvent.ACTION_MOVE 上重绘 View

转载 作者:行者123 更新时间:2023-11-30 01:13:41 24 4
gpt4 key购买 nike

我创建了背景为红色的基本 View 。我在我的 Activity 中使用该 View 。我将 setOnTouch 监听器设置为相同的 View 。在触摸事件上,我正在移动该 View 。

Before touch event it looks like this

After MotionEvent.ACTION_MOVE it look like this

在运动事件之后我想重绘 View 。我不想显示白色部分。

它应该像谷歌地图在任何方向移动 map 时那样重绘它。

以下代码是我的基本自定义 View

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;
}

提前致谢

最佳答案

您可能需要使 View 无效。

这有助于: 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;
}

关于java - 在 MotionEvent.ACTION_MOVE 上重绘 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38169109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com