コントロールをドラッグすると、いくつかのイベントによるレイアウトのリセットまたは位置の復元の問題が発生します.

1036 ワード

任意にドラッグしてスケールできるimageviewコントロールをカスタマイズしました.
コントロールをドラッグした後、仮想キーボードをトリガーするなど、いくつかの操作を実行するたびに、そのコントロールの位置が初期位置に復元されるという難しい問題が発生しました.
試してみると問題は解決しました
解決策は、ACTION_をキャプチャすることです.UP動作、この動作を発見したら実行方法onTouchUp()
このメソッドコードを以下に添付します.
void onTouchUp(MotionEvent event) {
		RelativeLayout.LayoutParams param=new RelativeLayout.LayoutParams(Width,Height);//Width、Height             
		param.leftMargin = left;//             
		param.topMargin = right;//             
		img.setLayoutParams(param);
	}

コントロールのWidth、Height、Left、Rightなどの情報については、画像の幅を取得するなど、カスタムコントロールに次のコードを追加する方法を、カスタムコントロールから直接作成することが望ましい.
/**        **/
	public int getimg_W() {
		return this.getWidth();
	}

呼び出しプログラムでparamを使用する.height=コントロール名.getimg_W; 
推測の原因:ドラッグするコントロールはカスタムコントロールなので、コントロールがドラッグされると、実際にはレイアウト内のコントロールの位置が変化しません.したがって、イベントトリガレイアウトが変化すると、コントロールの位置が復元されます.ここで使用する方法は、ドラッグ操作が完了するたびにACTIONがトリガーされることです.UP動作は、この動作に遭遇したときにコードを追加して、コントロールの最後の位置を手動で割り当てます.