다음을 수행 한 후 Button이 강조 표시된 상태로 유지되는 데 문제가 있습니다.
public class MainActivity extends AppCompatActivity {
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton button = (AppCompatButton) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Test", "calling onClick");
}
});
button.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP: {
v.getBackground().clearColorFilter();
v.invalidate();
v.performClick();
Log.d("Test", "Performing click");
return true;
}
}
return false;
}
});
}
}
위의 코드와 관련하여 사용하면 버튼 클릭이 터치로 처리 될 것으로 예상하고 "true"를 반환하면 touchListener에서 처리가 중지됩니다.
그러나 이것은 사실이 아닙니다. 클릭이 호출 되더라도 버튼은 강조 표시된 상태로 유지됩니다.
내가 얻는 것은 :
Test - calling onClick
Test - Performing click
반면에, 다음 코드를 사용하는 경우 버튼이 클릭되고 동일한 인쇄가되지만 버튼이 강조 표시된 상태로 멈추지 않습니다.
public class MainActivity extends AppCompatActivity {
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton button = (AppCompatButton) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Test", "calling onClick");
}
});
button.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP: {
v.getBackground().clearColorFilter();
v.invalidate();
// v.performClick();
Log.d("Test", "Performing click");
return false;
}
}
return false;
}
});
}
}
터치 이벤트에 대한 응답자 체인이 무엇인지 조금 혼란 스럽습니다. 내 생각 엔 :
1) TouchListener
2) ClickListener
3) ParentViews
누군가도 이것을 확인할 수 있습니까?