2012-04-03 16 views
3

在我的應用中,用戶可以點擊圖像縮略圖以查看完整尺寸版本。當點擊縮略圖時,會在代碼中創建一堆新視圖(即無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()),而不必在每個活動中都使用它(並且從每個活動創建漫長而笨拙的引用到縮放對象)。

+1

注意到,您需要添加 && keyEvent.getAction()== KeyEv ent.ACTION_DOWN //重複ACTION_UP被忽略 – ViliusK 2013-06-06 14:08:22

回答

4
@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
// TODO Auto-generated method stub 
if(keyCode == KeyEvent.KEYCODE_BACK) 
{ 
//Your logic or stuff 
return true; 
} 
else 
return super.onKeyUp(keyCode, event); 
} 

使用上面的超越控制的方法來處理返回按鍵下壓事件

在這些情況下使用如下 1)創建一個如下所示的活動::

/** 
* Top Activity that extends all Activity 
*/ 
package com.com.com;//change your package name 

import android.app.Activity; 
import android.view.KeyEvent; 


public class TopActivity extends Activity { 
    protected BaseActivity _activity; 


    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 
     if(keyCode == KeyEvent.KEYCODE_BACK){ 
      //your stuff if you wanna to have anything 
      return true; 
     } 
     else 
      return super.onKeyDown(keyCode, event); 
    } 
    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 
     if(keyCode == KeyEvent.KEYCODE_BACK) 
     { 
      //your stuff if you wanna to have anything 
      return true; 
     } 
     else 
      return super.onKeyUp(keyCode, event); 
    } 

} 

2)現在在你的代碼你的每一個活動來延長鬍亞蓉,所以改變它,使得它擴展TopActivity象下面這樣::

public class YourActivity extends TopActivity { 

每個活動//你的正常碼... }

完蛋了...嘗試它現在

+0

正如我在上面的評論中所指出的,當它是高級活動的一部分時,這段代碼很好。我的目標是將代碼放在一個地方,並將其用於多個活動。 – 2012-04-03 07:20:13

+0

謝謝,我最終基本上都是這麼說的 - 雖然我仍然不高興,因爲我無法完全使用與視圖相關的代碼捕獲關鍵事件,而不是活動。 – 2012-04-03 10:26:39

0

嘗試使用

公共類mActivity延伸活動{

@Override 
public void onBackPressed() { 
    // Stuff 
} 

}

+0

我實際上試圖在視圖上捕獲按鍵,而不是在活動中。請注意,此視圖是在代碼中創建的,實際上用於多個活動。我的目標是在一個地方編寫代碼來捕獲按鍵,而不管它在哪裏創建。 – 2012-04-03 07:19:22