用手指移动任何RelativeLayout(不改变布局参数)

Dan*_*ail 4 android android-animation

我有一个观点,我想用手指移动它.我想得到xDelta和yDelta,只是翻译视图的矩阵(不是图像视图,任何视图,例如RelativeLayout).我想知道如何做到这一点:

  1. 覆盖RelativeLayout的onDraw并在那里应用翻译矩阵.那可能吗?
  2. 我目前正在每个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);
}
Run Code Online (Sandbox Code Playgroud)

但似乎我做错了.

Cod*_*ord 6

如果你想实现拖拽手势,那么你可以使用onTouchListener,并在其MotionEvent.ACTION_MOVE使用setPadding到该视图设置填充.

以下是示例代码:

case MotionEvent.ACTION_MOVE:
    yourView.setPadding((int)event.getRawX(), (int)event.getRawY(), 0, 0);
Run Code Online (Sandbox Code Playgroud)

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;
    }
};
Run Code Online (Sandbox Code Playgroud)

您需要在运行时创建拖动图像,并且必须调整其位置.在此示例代码中,我没有调整位置,因此不会在触摸位置创建拖动的图像.您还需要考虑要拖动的图像的高度和宽度.

希望能帮助到你 !