私は直線レイアウトでビューを持っています。ビューが長く押されると、この線形レイアウトからビューが削除され、画面の同じ位置に相対レイアウトに配置されます。このようにして、私の指で画面上のビューを移動することができます。ビューが削除されたときにontouchイベントを維持して追加します
それはほとんど動作します: 私はlongpressイベントが働いています(ビューを削除し、ビューをrelativelayoutに配置します)。その後私はontoucheventlistenerを追加して、私のビューは、の2番目ののためだけに残っています。 toucheventが最後に発砲されたとき、私は "MotionEvent.ACTION_CANCEL"を得ました。私は私の指を削除し、再び私の動きで機能することができるビューに私の指を置く、それは私が私の指を削除するまで保持されます。
私の問題は、その時点で「MotionEvent.ACTION_CANCEL」が表示されているということですが、未処理のイベントがまだ残っています。それで、私はまだ約1秒間ontoucheventsになったのです。 (これは単なる考えです)。
誰かが私はontoucheventを保つことができますか、または私の指を置き換えることなくontoucheventを放つことができますか?
編集
私の考えは正しくありません。私が長いプレゼンテーションをするとき、ビューは私の指で留まりますが、どの方向にも50から100ピクセル移動するとすぐにビューが失われます。
編集2
moveViewはコルスの
private void moveView(View v) {
_relativeLayout.addView(v);
v.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_MOVE:
int x = (int) event.getRawX();
int y = (int) event.getRawY();
v.layout(x, y, x + v.getWidth(), y + v.getHeight());
break;
case MotionEvent.ACTION_UP:
_relativeLayout.removeView(v);
v = null;
break;
case MotionEvent.ACTION_CANCEL:
//it comes here when i move my finger more then 100 pixels
break;
}
return true;
}
});
}
longpressによって呼び出される
view.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
_linearLayout.removeView(v);
moveView(v);
return true;
}
});
のLinearLayout内部ビューのlongpressコード、これは要部であります元のコードではなく、コードの一部です
より良いデザインのようなサウンドはレイアウトを切り替えることではなく、両方ともRelativeLayoutで動作させるようにすることです。 – zode64
true、画面に横向きと上向きのスクロールなどの複雑なやりとりがあるため、多分あなたは正しいです。 – Doomic
これは明らかではありません。ビューはスクロールコンテナ内にあります。ビューを移動できるとすぐに、ビューはこのスクロールコンテナから画面の他の部分にも移動する必要があります。 – Doomic