2011-02-02 202 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 2014-05-31 18:57:24

回答

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? – 2011-02-03 03:07:05

1

KeyCode S依赖你用键盘上。这意味着您可能会从同一个键的不同键盘获得不同的KeyCode。请记住,从documentation,

View.OnKeyListener仅用于硬件键盘;一个软件输入法没有义务触发这个监听器。