【FF 7】レイヤーネストの多成について

1755 ワード

1、複数のLayerがネストされているため、リスニングonTouchイベントは戻り値に基づいて呼び出され、戻りfalseはtrueが終了するまで上位のonTouchイベントを削除します.
たとえば、次のコードがあります.

<AbsoluteLayout	
        android:id="@+id/AbsoluteLayout" 
        android:layout_height="fill_parent"
	android:layout_width="fill_parent" >
     	<ImageView
		android:id="@+id/myImageView"
		android:adjustViewBounds="true"
		android:maxHeight="72dip"
		android:maxWidth="72dip"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
        	launcher:direction="horizontal" />
</AbsoluteLayout>

ImageViewのonTouchイベントがfalseを返す場合、AbsoluteLayoutのonTouchイベントが呼び出されます.
2、実例分析では、Launcherのメインインタフェースに上記のコードを加え、ImageViewが指に従って移動する機能を実現したい.
質問:
途中で問題が発生したのは、ImageViewのonTouchイベントモニターを使って指でImageViewを押してドラッグすると、画面に同じ画像が2つ表示され、指のドラッグと調和しません.AbsoluteLayoutのonTouchを使用して移動イベントを傍受すると、画像が正常に移動します.
分析:
コンソール出力onTouchで得られたx,y座標から,2つのImageViewピクチャが現れるのではなく,1つのImageViewピクチャが2つの位置で点滅していることが分かった.これは座標値を解析した結果,AbsoluteLayoutを用いたonTouchイベントで傍受された座標はこのAbsoluteLayoutの下の座標であり,AbsoluteLayoutが全画面であればスクリーン座標であることが分かった.一方、ImageViewのonTouchイベントが傍受する座標は、前回ImageViewが存在する点が原点(0,0)であり、現在の指のタッチポイントとの相対座標であり、この座標には負の数が現れる.
解決:
ImageViewでのonTouchイベントMotionEvent.ACTION_MOVE:で前回のImageViewの画面上の座標を保持し、それに基づいて移動します.
上記の問題は、AbsoluteLayoutのonTouchイベントでは、このAbsoluteLayoutのImageViewが得られないことです.次のコードを参照してください.
public boolean onTouch(View v, MotionEvent event){
    if(v instanceof ImageView){}
}
このvは常にImageViewではなくAbsoluteLayoutです.AbsoluteLayoutのonTouchイベントでImageViewの座標を得る方法はまだ分かりません.