私はカスタムビューを画面の周りにドラッグすることができます。タップすると別のビューが表示されますが、エミュレータで使用するとすべて正常に動作します。しかし、実際のデバイスでは、カスタムビューはクリック時に新しいビューを表示しません。そして、私は理由を理解するのに苦労しています。カスタムビューのオントーチリスナー
私はこの問題はある場合、これがあると思う: 私は、画面の左端側の見解を置くときに、他のビューにのみタップに示しているが、私は今<に記号>を変更した場合ビューは左端ではなく右端から開くことができます。
case MotionEvent.ACTION_MOVE:
if(motionEvent.getRawX() > 120 && motionEvent.getRawY() > 120){
params.x = initialX + (int) (motionEvent.getRawX() - initialTouchX);
params.y = initialY + (int) (motionEvent.getRawY() - initialTouchY);
mWindowManager.updateViewLayout(entireLayout, params);
moving = true;
}
これは完全なコードです:任意の助けを事前に
collapsedLayout.setOnTouchListener(new View.OnTouchListener() {
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
initialX = params.x;
initialY = params.y;
initialTouchX = motionEvent.getRawX();
initialTouchY = motionEvent.getRawY();
return true;
case MotionEvent.ACTION_MOVE:
if(motionEvent.getRawX() > 120 && motionEvent.getRawY() > 120){
params.x = initialX + (int) (motionEvent.getRawX() - initialTouchX);
params.y = initialY + (int) (motionEvent.getRawY() - initialTouchY);
mWindowManager.updateViewLayout(entireLayout, params);
moving = true;
}
return true;
case MotionEvent.ACTION_UP:
if(moving){
if (params.x > 0) {
params.x = (int) dpWidth;
} else if (params.x < 0) {
params.x = (int) dpWidth * -1;
}
mWindowManager.updateViewLayout(entireLayout, params);
moving = false;
}else {
collapsedLayout.setVisibility(View.GONE);
expandedLayout.setVisibility(View.VISIBLE);
}
return true;
}
return false;
}
});
ありがとう!
をあなたの '本当に動いている。 タップにタッチリスナーの代わりにクリックリスナーを使用するか、アップイベントのタイムフレームを追加することを検討してください(たとえば、アップイベントがダウンから1秒以内にクリックされた場合) – RobVoisey
一部のログは、どのイベントがコールされたかをいつでも確認できます。 – jorjSB
@RobVoiseyはい、あなたが正しいです、私はドラッグするためのonTouchとビューを表示するためのonclickリスナーを実装するために行った。もう少し前に自分自身で試してみましたが、うまくいかなかったので、それを実現する方法をチェックしました。そしてそれは最終的にうまくいった!ハハ。ありがとうございました! –