2011-02-02 201 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僅用於硬件鍵盤;一個軟件輸入法沒有義務觸發這個監聽器。