フルスクリーンの FrameLayout 内に小さな ImageView があり、FrameLayout に触れると imageview がその位置に移動するように設定したいと思います。
ImageView の移動について見つけることができる他のすべての SO の質問を読みましたが、ソリューションがまだ機能していない理由はわかりません。
FrameLayout を拡張するカスタム ビュー:
@Override
public boolean onInterceptTouchEvent(MotionEvent event){
if(event.getActionMasked() == MotionEvent.ACTION_DOWN){
ImageView iv = (ImageView) this.findViewById(R.id.draggedImage);
FrameLayout.LayoutParams params = (LayoutParams) iv.getLayoutParams();
params.leftMargin = (int) event.getX();
params.bottomMargin = (int) event.getY();
iv.setLayoutParams(params);
iv.invalidate();
invalidate();
}
return true;
}
新しいタッチ位置を反映するようにlayoutparamsマージンを変更し、imageviewとframelayoutを無効にしました(これらのどれを行うべきかわかりません)が、imageViewは動揺しません(常にフレーム)。
また、画面に触れたときにこのメソッドが呼び出され、params が適切な X 値と Y 値で設定されていることも確認しました。
私のレイアウト:
<CustomFrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<!-- some other unrelated views -->
<ImageView
android:id="@+id/draggedImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/pause" />
</CustomFrameLayout>
編集:APIレベル10をターゲットにしようとしていることに言及する必要があったため、ハニカムビューの向きの利点を使用できません:(