2011-07-17 8 views
1

私はクラスをViewGroupに拡張し、すべてからMotionEventを取得したいと思います。これまでのところ私はこれを持っている:ViewGroup内のMotionEventのトレース

class TestViewGroup extends ViewGroup { 
    public TestViewGroup(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     Log.d("TestViewGroup", "X: " + (int)event.getX() + " Y: " + (int)event.getY()); 
     return true; 
    } 
} 

onTouchEvent(MotionEvent event)方法はMotionEvent私は、画面上で私の指を置くたびに捕捉することができます。しかし、指がまだ下にある間に指を画面の周りに動かすと、指の座標を追跡し続けることはありません。私は、Viewを拡張するクラスでは、Viewを動かすときに指を辿ることが可能であることを知っています。私はちょうどViewGroupに同じアイデアを適用することが可能であるかと思っています。

答えて

0

私は非常に単純なのViewGroupクラスを実装し、コードをコピーし、onTouchEventは

をうまく働いた私が異なっやった唯一のことは、一般的に、私はまたonTochEventクラスのスーパーを呼ぶだろうが、コンストラクタのすべてを実装しましたそれは違いを生むようには見えなかった。

だから私は違いが出る可能性のあるコード/ xmlが残っているのでしょうか?

コンストラクタを除いて、あなたとほとんど同じように、エミュレータとデバイスのすべてのタッチイベントをキャプチャします。

public class customViewGroup extends ViewGroup { 

    public customViewGroup(Context context) { 
     super(context,null,0); 
    } 

    public customViewGroup(Context context, AttributeSet attrs) { 
     super(context, attrs,0); 

    } 

    public customViewGroup(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { 

    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     Log.d("bThere", "X: " + (int)event.getX() + " Y: " + (int)event.getY()); 
     return true;//super.onTouchEvent(event); 
    } 

} 
+0

あなたは正しく、ViewまたはViewGroupとは関係ありませんが、実際にどのように統合しているかとは関係しています。私はViewGroupをシステムのWindowManagerに入れようとしているので、システムオーバーレイ上に永続的に留まることができます(基本的にどのアクティビティが上にあってもビューを表示します)。 WindowManagerにViewを追加すると、タッチイベントがどのようにそれに渡されるかが分かりますか? – Brian

+0

@AeroDroid ...面白いことのように聞こえる、私は別の質問を開いて再熟語を提案し、またいくつかのコードを追加します。イベントを取得する際にもう少し堅牢であるように思われるので、@Override public boolean dispatchTouchEvent(MotionEvent event){}を試してみてください。 – Idistic

+0

ちょっと前に新しい質問を開いたばかりですここでそれを見てください[ここ](http://stackoverflow.com/questions/6725636/getting-all-motionevents-with-windowmanager-layoutparams-flag-watch-outside-touch)。 – Brian

-1

ビューにもっと多くのtoucheventが受信できるようにするには、viewGroup.setClickable(true);を追加する必要があります。