MainActivity 包含 SurfaceView 與 TextView。SurfaceView 觸摸事件計數 step++,需實時更新 TextView 顯示。
public interface OnStepChangeListener {
void onStepChanged(int step);
}
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private OnStepChangeListener listener;
private int step = 0;
public MySurfaceView(Context context) {
super(context);
getHolder().addCallback(this);
}
public void setOnStepChangeListener(OnStepChangeListener listener) {
this.listener = listener;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
step++;
if (listener != null) {
listener.onStepChanged(step); // 回調通知
}
}
return true;
}
// ... surfaceCreated/Changed/Destroyed
}
public class MainActivity extends Activity implements OnStepChangeListener {
private MySurfaceView surfaceView;
private TextView tvStep;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surfaceView);
tvStep = findViewById(R.id.tvStep);
surfaceView.setOnStepChangeListener(this); // 關鍵:注冊回調
}
@Override
public void onStepChanged(int step) {
// 確保 UI 線程更新
runOnUiThread(() -> tvStep.setText("Step: " + step));
}
}
runOnUiThread 或 Handler 更新 View。onDestroy 時置空 listener 防止內存洩漏。大型項目可採用 EventBus (Greenrobot) 或 Jetpack LiveData/Flow 實現組件間響應式通信,進一步降低耦合。