2016-03-28 17 views
-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; 
    } 

また、背景色を変更してクリックすることもできます。

enter image description here

私は、レイアウト内でそのボタンを維持する必要があります。

また、私はthisthisリンクを試しましたが、これらのアプローチのどちらも、側面に移動したときにボタンを絞ることにつながりました。

助けてください。 ありがとうございます。

enter image description here

答えて

0

さてあなたは、そのX位置を取得し、「右」のエッジがどこにあるか確認し、それが大きいか、あなたのビューポートの幅に等しい場合を比較するために、それまでその幅を追加する必要があります。私はしばらくのうちにJavaを書いていないが、そのトリックを行う必要があります。

あなたはその位置を確認していますか?あなたのアニメーション()メソッドではたぶん

おそらく

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

あなたのチェックを行います。これを実現させていることを見ながら推測するのは難しいです。イベントを起こしているのは何ですか? 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(); 
+0

私はあなたのアイデアを得ました。私はそれを試していましたが、私が実装している方法では機能しません。 –

関連する問題