화면 주위로 드래그 할 수있는 사용자 정의보기가 있으며, 다른보기를 표시 할 때 에뮬레이터에서 사용할 때 모든 것이 올바르게 작동합니다. 그러나 실제 기기에서 맞춤보기는 클릭시 새로운보기를 표시하지 않습니다. 그리고 나는 왜 그런지 이해하려고 고심하고 있습니다.사용자 정의보기의 겹쳐서 수신자
나는 문제가 곳이 생각 : 나는 화면의 왼쪽 측면에있는 뷰를 넣을 때 다른보기는 탭에 표시됩니다,하지만 난 > 지금 <에 기호를 변경하는 경우 뷰는 오른쪽이 아닌 왼쪽에서 열 수 있습니다.
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 리스너를 구현했습니다. 나는 그 전에 그것을 혼자서 시도해 보았지만 효과가 없었기 때문에 가능하다고 말했을 때 그것을 달성하는 방법을 확인하러갔습니다. 그리고 그 마침내 펑! 하하. 고마워요! –