-1

このコードを使用して画面内のボタンを移動していますが、側面に到達すると画面の外に移動します。

    private float mPrezX, mPrevY;

    private static final int MAX_CLICK_DURATION = 200;
    private long startClickTime;

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        int action = event.getActionMasked();

        Button gvup = (Button)findViewById(R.id.giveup);
        gvup.setBackground(getResources().getDrawable(R.drawable.btn));

        switch (action ) {
            case MotionEvent.ACTION_DOWN: {
                mPrevX = view.getX() - event.getRawX();
                mPrevY = view.getY() - event.getRawY();
                startClickTime = Calendar.getInstance().getTimeInMillis();//!!
                gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
                break;
            }
            case MotionEvent.ACTION_MOVE:
            {
                view.animate()
                    .x(event.getRawX() + mPrevX)
                    .y(event.getRawY() + mPrevY)
                    .setDuration(0)
                    .start();

                gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
                break;
            }
            case MotionEvent.ACTION_CANCEL:
                gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
                break;
            case MotionEvent.ACTION_UP:
                long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                if(clickDuration < MAX_CLICK_DURATION) {
                    //click event has occurred
                    gvup.setBackground(getResources().getDrawable(R.drawable.btn));
                    giveUp();
                }
                break;
        }
        return true;
    }

また、押された場合は背景色を変更し、クリック可能にしました。

ここに画像の説明を入力

そのボタンをレイアウト内に保持する必要があります。

私もこれこのリンクを試しましたが、これらのアプローチは両方とも、横に移動するとボタンを絞ることにつながります.

助けてください。前もって感謝します。

ここに画像の説明を入力

4

1 に答える 1

0

その X 位置を取得し、その幅を追加して、「右」の端がどこにあるかを確認し、それがビューポートの幅より大きいか等しいかを比較する必要があります。しばらく Java を書いていませんが、うまくいくはずです。

その場所を確認していますか?

多分

int rightEdge = currentPos.X + itsWidth;
if(rightEdge >= screenWidth) // something here

たぶんあなたの animate() メソッドであなたのチェックをしてください。何がこれを引き起こしているのかを見ずに推測するのは難しいです。イベントの発火とは何ですか?event.getRawX() とは何ですか? それは画面上のタッチポイントですか?ポイントが選択された後にアニメーション化していますか? または、最小/最大 x と最小/最大 y を定義して、円がそれを超えないようにすることもできます。

            view.animate()
                if( .x(event.getRawX() + mPrevX) > screenWidth ){
                       .x(screenwidth - circleWidth)
                } // do the same for the Y - must check the max and min for both Y and X
                .x(event.getRawX() + mPrevX)
                .y(event.getRawY() + mPrevY)
                .setDuration(0)
                .start();
于 2016-03-28T23:39:58.487 に答える