Tôi gặp sự cố với Nút của mình ở trạng thái được tô sáng, sau khi thực hiện các thao tác sau:
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;
}
});
}
}
Liên quan đến mã ở trên, khi sử dụng nó, tôi hy vọng nút bấm sẽ được xử lý bằng cảm ứng và bằng cách trả về "true", việc xử lý sẽ dừng tại touchListener.
Nhưng đây không phải là trường hợp. Nút vẫn ở trạng thái được tô sáng, ngay cả khi nhấp chuột đang được gọi.
Những gì tôi nhận được là:
Test - calling onClick
Test - Performing click
mặt khác, nếu tôi đang sử dụng đoạn mã sau, nút được nhấp, cùng một bản in, nhưng nút không bị kẹt trong trạng thái được tô sáng:
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;
}
});
}
}
Tôi hơi bối rối khi biết chuỗi phản hồi cho sự kiện chạm. Tôi đoán là vậy:
1) Trình nghe cảm ứng
2) ClickListener
3) Phụ huynh
Ai đó có thể xác nhận điều này là tốt?