在我的應用中,用戶可以點擊圖像縮略圖以查看完整尺寸版本。當點擊縮略圖時,會在代碼中創建一堆新視圖(即無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; } });
編輯:我有一對夫婦的人提供代碼片段答案的擴展活動類中使用。我上面複製的這段代碼存在於一個在多個活動中實例化的類中;我的目標是讓代碼在一個位置監聽和捕獲BACK鍵事件(如OnClickListener()),而不必在每個活動中都使用它(並且從每個活動創建漫長而笨拙的引用到縮放對象)。
注意到,您需要添加 && keyEvent.getAction()== KeyEv ent.ACTION_DOWN //重複ACTION_UP被忽略 – ViliusK 2013-06-06 14:08:22