20

画面上でいくつかのビューをドラッグする必要があります。タッチ リスナーの ACTION_MOVE のモーション イベントから、レイアウト パラメータの左と上を変更して位置を変更しています。アイテムをよりスムーズに「ドラッグ」する方法はありますか? これは一種の「ドラッグ」がまったくスムーズではないためです...コードは次のとおりです

public boolean onTouch(View view, MotionEvent motionEvent) {
    switch (motionEvent.getAction()) {
        case MotionEvent.ACTION_DOWN:
            dx = (int) motionEvent.getX();
            dy = (int) motionEvent.getY();
            break;

        case MotionEvent.ACTION_MOVE:
            int x = (int) motionEvent.getX();
            int y = (int) motionEvent.getY();
            RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams();
            int left = lp.leftMargin + (x - dx);
            int top = lp.topMargin + (y - dy);
            lp.leftMargin = left;
            lp.topMargin = top;
            view.setLayoutParams(lp);
            break;
    }
    return true;
}
4

6 に答える 6

26

getY と getX の代わりに、motionEvent.getRawX() と motionEvent.getRawY() を使用してみてください。

于 2013-04-08T14:06:45.223 に答える
1

スムーズに動かない理由は、leftMargin と topMargin の整数値です。
スムーズに移動するには、位置をフロートにする必要があります。
これは役に立ちます。

于 2012-10-08T18:44:06.633 に答える