2012-04-03 14 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; 
      } 
     }); 

EDIT:私は活動を拡張するクラス内で使用するコードスニペットを提供する人の回答のカップルを持っていたがこれは私が現時点でしようとしているものです。上にコピーしたこのコードは、複数のアクティビティでインスタンス化されるクラスに存在します。私の目標は、OnClickListener()のような1つの場所でBACKキーイベントをリッスンしキャッチするコードをすべてのアクティビティに持たせるのではなく(各アクティビティからズームしたオブジェクトへ長くて扱いにくい参照を作成する必要はありません)。

+1

ノートをお試しくださいent.ACTION_DOWN //重複するACTION_UPは無視されます – ViliusK

答えて

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)今すぐあなたのコードの中で、あなたのすべての活動はAcitivityは拡張し、それは、そのようなことは以下のように::それぞれの活動について//あなたの通常のコード

public class YourActivity extends TopActivity { 

... TopActivityを延長することを変更します}

のthatsはそれは...あなたは && keyEvent.getAction()== KeyEvを追加する必要があることを、今

+0

上記のコメントで指摘したように、このコードは高レベルのアクティビティの一部である場合は問題ありません。私の目標は、1つの場所にコードを持ち、それを複数のアクティビティで使用させることです。 –

+0

ありがとう、私は本質的にあなたが言ったことをやってしまった - 私はまだ、私はキーのイベントをビューに関連付けられたコードで、活動ではなく、 –

0

使用してみ

パブリッククラスmActivityは、これらのシナリオの使用で戻るキー押下イベント

を処理するために上記オーバーライドし法アクティビティ{

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

}

+0

私は実際には、アクティビティではなくビュー上のキー・プレスをキャッチしようとしています。このビューはコードで作成され、実際は複数のアクティビティで使用されます。私の目標は、作成場所にかかわらずキープレスをキャッチするためにコードを1か所に書くことです。 –

関連する問題