0
두 개의 Buttons
이 내 Linear Layout
에 있습니다. 내 Buttons
의 onTouch
을 성공적으로 덮어 씁니다. 그래서 내가 그들 위에 뛰어 들면 뭔가가 일어납니다. 또한 을 클릭 할 수 있기를 바 랐으므로 onSingleTapUp
을 덮어 씁니다.onSingleTapUp - 버튼을 누르는 경우에만
문제는 onSingleTapUp
이 내 Buttons
에있을뿐만 아니라 다른 곳에서도 사용할 수 있다는 것입니다. 그렇다면 onSingleTapUp
을 화면의 아무 곳이나 두드리는 대신 Buttons
의 탭핑 만 참조하도록 만드는 방법이 있습니까?
시도 : 나는 MotionEvent
부울 isButtonPressed(int button)
그래서 나는 다음과 같은 시도가 발견하지만 내 응용 프로그램 충돌 :
클래스 MainActivity :
public class MainActivity extends Activity {
protected Button bttn1, bttn2;
private GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGestureDetector = new GestureDetector(this, new GestureListener());
bttn1 = (Button) findViewById(R.id.bttn1);
bttn2 = (Button) findViewById(R.id.bttn2);
bttn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("button1", "click event performed");
}
});
bttn1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(mGestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
});
bttn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("button2", "click event performed");
}
});
bttn2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(mGestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
boolean eventConsumed=mGestureDetector.onTouchEvent(event);
if (eventConsumed)
{
return true;
}
else
return false;
}
}
다음
@Override
public boolean onSingleTapUp(MotionEvent ev) {
if (ev.isButtonPressed(1))
Log.d("button", "override - click event performed");
return true;
}
내 전체 코드입니다
클래스 제스처 수신기 :
package com.example.swipetest;
public class GestureListener extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onSingleTapUp(MotionEvent ev) {
Log.d("button", "override - click event performed");
return true;
}
@Override
public boolean onDown(MotionEvent ev) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.d("fling", "fling performed");
return true;
}
}
이 모두 같은 클래스에? - 라인에서 오류가 발생합니다. b.setOnTouchListener (new MyTouchListener (this, new MyListener() {: 생성자 MyTouchListener (MainActivity, new MyListener() {})가 정의되지 않았습니다 – user2456977
@ user2456977 별도의 클래스. –
감사합니다. 이거 멋지 네요. 그냥 MyTouchListener의 @override onTouch 메서드와 혼동 스럽습니다. 왜 mListener.onTouch() 및 mGestureDetector.onTouchEvent (이벤트)가 필요한가요? 무엇이 필요합니까? – user2456977