LinearLayout 內含 ImageView + TextView,點擊整個佈局時需讓 ImageView 顯示按下狀態(Selector 效果)。
linearLayout.setOnClickListener(v -> {
// 手動觸發子控件按下狀態
imageView.setPressed(true);
// 延遲釋放,產生視覺反饋
imageView.postDelayed(() -> imageView.setPressed(false), 100);
// 業務邏輯...
});
<selector xmlns:android="...">
<item android:state_pressed="true" android:drawable="@drawable/img_pressed" />
<item android:drawable="@drawable/img_normal" />
</selector>
ImageView 設置 `android:src="@drawable/selector_img"`。
public class ClickableLayout extends LinearLayout {
public ClickableLayout(Context ctx, AttributeSet attrs) { super(ctx, attrs); }
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true; // 攔截觸摸,子控件不再接收
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) setPressed(true);
else if (ev.getAction() == MotionEvent.ACTION_UP) {
setPressed(false);
performClick(); // 觸發 OnClickListener
} else if (ev.getAction() == MotionEvent.ACTION_CANCEL) setPressed(false);
return true;
}
}
佈局文件直接用 `