私のアプリでは、イメージサムネイルをタップしてフルサイズのバージョンを表示できます。サムネイルをタップすると、ビュー階層の最後に追加された一連の新しいビュー(XMLなし)がコード内に作成され、いくつかの拡大縮小および回転遷移が起こると、画像のフルサイズの高解像度版が表示されます。フルサイズの画像をタップすると、トランジションが反転し、ビュー階層から新しいビューが削除されます。アクティビティではなく子ビューのBACKキーイベントを処理します
また、ユーザーはBACKキーを押して画像の切り替わりを元に戻すこともできます。しかし、私はKeyEventをキャッチするように見えることはできません。
// Set a click listener on the image to reverse everything frameView.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { zoomOut(); // This works fine } }); // Set the focus onto the frame and then set a key listener to catch the back buttons frameView.setFocusable(true); frameView.setFocusableInTouchMode(true); frameView.requestFocus(); frameView.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { // The code never even gets here !!! if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { zoomOut(); return true; } return false; } });
EDIT:私は活動を拡張するクラス内で使用するコードスニペットを提供する人の回答のカップルを持っていたがこれは私が現時点でしようとしているものです。上にコピーしたこのコードは、複数のアクティビティでインスタンス化されるクラスに存在します。私の目標は、OnClickListener()のような1つの場所でBACKキーイベントをリッスンしキャッチするコードをすべてのアクティビティに持たせるのではなく(各アクティビティからズームしたオブジェクトへ長くて扱いにくい参照を作成する必要はありません)。
ノートをお試しくださいent.ACTION_DOWN //重複するACTION_UPは無視されます – ViliusK