Android 用手指移动任何RelativeLayout(不更改布局参数)
我有一个视图,我想用手指移动它。我想得到xDelta和yDelta,然后只转换视图的矩阵(不是图像视图,任何视图,例如RelativeLayout)。 我想知道如何做到这一点:Android 用手指移动任何RelativeLayout(不更改布局参数),android,android-animation,Android,Android Animation,我有一个视图,我想用手指移动它。我想得到xDelta和yDelta,然后只转换视图的矩阵(不是图像视图,任何视图,例如RelativeLayout)。 我想知道如何做到这一点: 覆盖RelativeLayout的onDraw并在那里应用转换矩阵。可能吗 我目前正在做的是在每个onTouch事件上应用动画。动画的持续时间为0,x/y的开始/结束时间相同(setFillAfter=true)。它只是把风景放在我想要的地方。但是那不是太贵了吗 我不能直接通过onDraw操作任何视图的矩阵吗?我试过这样
@Override
protected void onDraw(Canvas canvas) {
if (getDx() != 0 && getDy() != 0) {
m = canvas.getMatrix();
m.postTranslate(dx, dy);
canvas.setMatrix(m);
}
super.onDraw(canvas);
}
但似乎我做错了。我不想告诉你,你的问题比你想象的更容易,但下面是它的样子:
@Override
protected void onDraw(Canvas canvas) {
if (getDx() != 0 && getDy() != 0) {
canvas.translate(getDx(), getDy());
}
super.onDraw(canvas);
}
希望这有帮助 如果要实现拖动手势,则可以在其运动事件中使用onTouchListener。操作\u移动使用setPadding将填充设置为该视图 以下是示例代码:
case MotionEvent.ACTION_MOVE:
yourView.setPadding((int)event.getRawX(), (int)event.getRawY(), 0, 0);
onTouchListener的示例:-
OnTouchListener drag= new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_MOVE:
img.setPadding((int)event.getRawX(), (int)event.getRawY(), 0, 0);
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
} return true;
}
};
您需要在运行时创建拖动图像,并且必须调整其位置。在这个示例代码中,我没有调整位置,因此不会在触摸位置创建拖动的图像。你还需要考虑被拖拽的图像的高度和宽度。
希望有帮助 如果要永久移动布局(在临时情况下,我们可以使用动画),请使用。希望这将有助于您实现这一目标:
PS:绘图以左上角为0,0开始,我宁愿在位图上绘制一次视图并转换位图。我认为这样会更有效率。当拖动时,真实视图可能不可见或消失。所以你认为没有办法直接操纵矩阵?我不确定视图将如何使用填充移动?你试过了吗是的。我用来实现API级别低于11的拖放特性。