2017-07-18 16 views
0

enter image description here私はこの問題について長年悩まされており、インターネットはどちらも手伝っていないようです。Android - onTouch(ACTION_MOVE) - 画面を表示しないようにビューを停止する

私はonTouchListenerとそれに付随するイベントを使用して画面をドラッグできるカスタムビューを持っています。このドラッグが画面を終了するときに停止する必要があります。私は画面の大きさを持っており、何かが必要なときに検出することができますが、ビューを境界内にとどめるよう強制する良い方法は考えられません。

ブール論理を設定すると、表示がフリーズして元に戻せなくなります。 もしそのマークまでのポイントを保存してから、境界が検出されたときにビューを再設定すると、ひどい(不安定な)ように見えます。

ユーザーが境界線から逆方向にドラッグすると「再生」に戻るように指を動かしている場合でも、境界線にとどまるような視野を探しています私は、x、

を詳述すると...あなたは私が

case MotionEvent.ACTION_MOVE: 
       RelativeLayout.LayoutParams moveParam = (RelativeLayout.LayoutParams) v.getLayoutParams(); 

       float maxTop = (mHeight-mPeepHole)/2; 
       Log.d(TAG, "onTouch: maxTop = " + maxTop); 
       if (moveParam.topMargin > maxTop || moveParam.topMargin < -(mHeight-mPeepHole)/2) 
       { 
        Log.d(TAG, "onTouch: OUT OF BOUNDS HEIGHT"); 
        // this fires when I need it to, all good. 
        // here is where I need some logic 

       } 

       if (moveParam.leftMargin > (mWidth-mPeepHole)/2 || moveParam.leftMargin < -(mWidth-mPeepHole)/2) 
       { 
        Log.d(TAG, "onTouch: OUT OF BOUNDS WIDTH"); 
        // and here... 
       } 

       moveParam.leftMargin = x - Position_X; 
       moveParam.topMargin = y - Position_Y; 
       moveParam.rightMargin = -500; // ignore this at present 
       moveParam.bottomMargin = -500; // ignore this at present 
       v.setLayoutParams(moveParam); 

       break; 

でよどこのアイデアを得ることができるように

関連するコードは以下の通りです...架空の壁のように思っています画面を終了できないはずの中心点です。ビューは、タッチ及び任意の点からドラッグまだxは全く画面をオフに移動するビューを妨げる画面端

答えて

0
moveParam.leftMargin = Math.max(0,Math.min(screen_width, x - Position_X- view.getWidth())); 

に当たったときは常に停止しなければならないことができます。あなたが基本的にやっていることは、左マージンを0以下にすることも、スクリーンの終わりより多くすることもありません。

+0

これはおかげです。しかし、それはユーザーのタッチ入力x/yから追跡するので、私のプロジェクトではうまくいきません。私の見解は、画面の中心点(幅/ 2、高さ/ 2)だけで、どこからでも触れることができるフルスクリーンです。 –

+0

次に、ビュー幅を減算する代わりに、その半分を減算します。そして、0でmaxingするのではなく、-view.getWidth()/ 2でmaxを設定する –

+0

詳しいことはありますか?私はそれが動作するようにすることはできませんが、私は近くにいると感じています。検出はどこに配置しても機能しますが、画面の中央に正確に配置されているとビューは「スティック」します。 –

関連する問題