4

私は次のようなRelativeLayoutを持っています:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#65ffffff" >

<com.sonyericsson.zoom.ImageZoomView
    android:id="@+id/zoomview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />


</RelativeLayout>

そのRelativeLayoutに設定されたタッチイベントがたくさんあります。ただし、com.sonyericsson.zoom.ImageZoomViewには、タッチイベントを処理するための独自のロジックもあります。

画面でタッチイベントを実行すると、com.sonyericsson.zoom.ImageZoomViewクラスのタッチリスナーが最初に呼び出されます(これは私が期待していることです)。問題は、そのタッチイベントで「true」を返すと、RelativeLayoutのタッチリスナーが呼び出されないことです。一方、「false」を返すと呼び出されますが、ImageZoomViewクラスが行ったタッチ処理は単純に発生しません。(最後に「false」を返したためだと思います。そのため、Androidは、com.sonyericsson.zoom.ImageZoomViewクラスのタッチイベントが以前に行ったUIの更新を単に無視します)。

つまり、com.sonyericsson.zoom.ImageZoomViewとRelativeLayoutの両方で同じタッチイベントを処理できるようにしたいと考えています。

それを行う方法はありますか?

私はAndroid2.2以降を使用しています。

前もって感謝します!

4

4 に答える 4

1

ImageZoomViewのOnTouchListenerのロジックをdispatchTouchEventメソッドに移動することをお勧めします。

以前に遭遇した問題では、dispatchTouchEvent / dispatchKeyEventは通常、onTouchListener/onKeyListenerが期待どおりに機能していないときに機能することがわかりました。

于 2012-07-16T05:14:26.510 に答える
0

クラスから継承しImageZoomViewます。

この継承されたクラスには、RelativeLayoutへの参照があります。

タッチ処理メソッドをオーバーライドし、次の擬似コードを入力します。

bool result = super.onTouch();
referencedRelativeLayout.onTouch();
return result;

そうすれば、両方のウィジェットがイベントを取得します。

于 2012-07-16T02:26:19.140 に答える
0

あなたのImageZoomViewクラスが拡張していると言わないでくださいView、あなたの主な活動であなたは次のようなことをすることができます:

ImageZoomView mView;    

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);       

    mView = (ImageZoomView) findViewById(R.id.zoomview);         
    mView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

        //Do whatever
        return false;
    });        

}

ImageZoomViewそれがボタン(ビューから伸びる)であるかのように扱ってください。

お役に立てば幸いです。

于 2012-07-16T02:26:54.070 に答える
0

以下のように、メソッドonInterceptTouchEventを使用することになりました。

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {

        return onTouchEvent(ev);
}

「false」を返すには、メソッドonTouchEventを実装する必要がありました。

@Override
public boolean onTouchEvent(MotionEvent event) {

      gesturedetector.onTouchEvent(event);      
   return false;
}

そうすれば、子供たちに送られる前にイベントを傍受することができました。そこで、その前に欲しかったデプロセッシングを行いました。

于 2012-07-17T03:53:12.027 に答える