2011-02-02 9 views
9

キーイベントでアニメーションを実装しようとしています。 OnClickListenerでは同じコードが正常に機能していますが、OnKeyListenerでは何も起こりません。 Logcatでもエラーメッセージは表示されません。OnKeyListenerが機能しない

この問題を解決するのを手伝ってください。以下は私のコードです。私が間違っている場所を教えてください。

package com.example.SliderImage; 

import android.app.Activity; 

import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnKeyListener; 
import android.view.animation.AccelerateInterpolator; 
import android.view.animation.Animation; 
import android.view.animation.TranslateAnimation; 
import android.widget.Button; 
import android.widget.ViewFlipper; 

public class SliderImage extends Activity { 
    ViewFlipper flipper; 
    String value; 
    int i; 

    int menuArray[] = {R.id.gtmain, R.id.gtmini, R.id.gtmore}; 

    protected void showPrevious() { 
      // TODO Auto-generated method stub 

     } 
     protected void setInAnimation(Animation inFromRightAnimation) { 
      // TODO Auto-generated method stub 

     } 
     protected void setOutAnimation(Animation outToLeftAnimation) { 
      // TODO Auto-generated method stub 

     } 
     protected void showNext() { 
      // TODO Auto-generated method stub 

     } 
     private Animation inFromRightAnimation() { 

      Animation inFromRight = new TranslateAnimation(
      Animation.RELATIVE_TO_PARENT, +1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, 
      Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
      ); 
      inFromRight.setDuration(500); 
      inFromRight.setInterpolator(new AccelerateInterpolator()); 
      return inFromRight; 
      } 
     private Animation outToLeftAnimation() { 

      Animation outtoLeft = new TranslateAnimation(
       Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, 
       Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
      ); 
      outtoLeft.setDuration(500); 
      outtoLeft.setInterpolator(new AccelerateInterpolator()); 
      return outtoLeft; 
      } 



     private Animation inFromLeftAnimation() { 

      Animation inFromLeft = new TranslateAnimation(
      Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, 
      Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
      ); 
      inFromLeft.setDuration(500); 
      inFromLeft.setInterpolator(new AccelerateInterpolator()); 
      return inFromLeft; 
      } 
     private Animation outToRightAnimation() { 

      Animation outtoRight = new TranslateAnimation(
       Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, +1.0f, 
       Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
      ); 
      outtoRight.setDuration(500); 
      outtoRight.setInterpolator(new AccelerateInterpolator()); 
      return outtoRight; 
      } 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.home); 

    flipper = (ViewFlipper) findViewById(R.id.flipper); 

    final Button miniButton = (Button) findViewById(R.id.gtmini); 
    final Button mainButton = (Button) findViewById(R.id.gtmain); 
    final Button moreButton = (Button) findViewById(R.id.gtmore); 

    miniButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      flipper.setInAnimation(inFromRightAnimation()); 
      flipper.setOutAnimation(outToLeftAnimation()); 
      flipper.showNext();  
     } 
    }); 

    mainButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      flipper.setInAnimation(inFromLeftAnimation()); 
      flipper.setOutAnimation(outToRightAnimation()); 
      //flipper.showPrevious(); 
      flipper.showNext(); 
     } 
    }); 
    moreButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      flipper.setInAnimation(inFromLeftAnimation()); 
      flipper.setOutAnimation(outToRightAnimation()); 
      // flipper.showPrevious(); 
      flipper.showNext(); 
     } 
    }); 

    mainButton.setOnKeyListener(new OnKeyListener() { 

     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // TODO Auto-generated method stub 
      String a1=String.valueOf(keyCode); 
      Log.i("listvalaaaaaaaaaa",a1); 
      if (keyCode==66) { 
       //String value=mainButton.getText().toString(); 
       if(value.equalsIgnoreCase("GO TO MAIN")) 
       { 
        //startActivity(new Intent(Start.this,MainEpg.class)); 
       } 
       if(value.equalsIgnoreCase("GO TO MINI")) 
       { 
        //startActivity(new Intent(Start.this,MiniEpg.class)); 
       } 
      } 

      if (keyCode==22) { 

       Log.i("insideright","ghkhkjhk"); 
       flipper.setInAnimation(inFromRightAnimation()); 
       flipper.setOutAnimation(outToLeftAnimation()); 
       flipper.showNext();  

      } 
       int c = moreButton.getId(); 
       int b = mainButton.getId(); 
       int a = moreButton.getId(); 

       menuArray[0] = b; 
       menuArray[1] = c; 
       menuArray[2] = a; 

       moreButton.setId(menuArray[i]); 
       miniButton.setId(menuArray[++i]); 
       mainButton.setId(menuArray[++i]); 

       mainButton.requestFocus(); 
       i = 0; 
       //mainButton.requestFocus(); 
       mainButton.setSelected(true); 
       flipper.setInAnimation(inFromRightAnimation()); 
       flipper.setOutAnimation(outToLeftAnimation()); 
       flipper.showNext();  

      if (keyCode==21) { 

       int a11 = moreButton.getId(); 
       int b1 = mainButton.getId(); 
       int c1 = moreButton.getId(); 

       menuArray[0] = c1; 
       menuArray[1] = b1; 
       menuArray[2] = a11; 

       moreButton.setId(menuArray[i]); 
       miniButton.setId(menuArray[++i]); 
       mainButton.setId(menuArray[++i]); 

       mainButton.requestFocus(); 
       i = 0; 

       //mainButton.requestFocus(); 
       mainButton.setSelected(true); 
       /* flipper.setInAnimation(inFromRightAnimation()); 
       flipper.setOutAnimation(outToLeftAnimation()); 
       flipper.showPrevious();*/ 
      } 
      return true; 
      } 
     }); 


    } 



} 
+0

今後、この問題を再現する*最小限の例*を示してください。 – Qix

答えて

0

ここで私は、キーリスナーに実装する方法:

this.m_vwJokeEditText.setOnKeyListener(new OnKeyListener() { 

     @Override 
     public boolean onKey(View arg0, int arg1, KeyEvent arg2) { 
      if (arg2.getAction() == KeyEvent.ACTION_DOWN) { 
       if (arg1 == KeyEvent.KEYCODE_DPAD_CENTER 
         || arg1 == KeyEvent.KEYCODE_ENTER) { 

        // do something here 

        return true; 
       } 
      } 
      return false; 
     } 

    }); 
+0

は、キーを押すとonKeyが呼び出されますか? –

+0

はい - このコードは、キーの操作が停止し、押されたキーがdpadまたはenterのときに何かを行います。質問コードの問題は、KeyEventとint Actionが混在していることです – eosgood

1

KeyCodeの使用キーボードに依存します。同じ鍵の異なるキーボードから異なるKeyCodeを取得する可能性があります。また、documentationから、

から覚えておいてください。View.OnKeyListenerは、ハードウェアキーボードにのみ有効です。ソフトウェア入力メソッドは、このリスナを起動する義務を負いません。