Aşağıdakileri yaptıktan sonra, düğmemin vurgulanmış durumda kalmasıyla ilgili bir sorun yaşıyorum:
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;
}
});
}
}
Yukarıdaki kod ile ilgili olarak, bunu kullanırken, dokunma tarafından ele alınacak düğme tıklamasını bekliyorum ve "true" döndürerek, işleme touchListener'da durmalıdır.
Ancak durum böyle değil. Tıklama çağrılsa bile düğme vurgulanmış durumda kalır.
Ne olsun:
Test - calling onClick
Test - Performing click
Öte yandan, aşağıdaki kodu kullanıyorsam, düğme tıklanır, aynı yazdırılır, ancak düğme vurgulanan durumda takılı kalmaz:
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;
}
});
}
}
Touch event'in yanıtlayıcı zincirinin ne olduğu konusunda biraz kafam karıştı. Benim tahminim şudur:
1) Dokunmatik Liste
2) ClickListener
3) ParentViews
Birisi de bunu onaylayabilir mi?