2011-02-02 8 views
9

Estoy tratando de implementar una animación en evento clave. El mismo código funciona bien en OnClickListener pero OnKeyListener, nada está sucediendo. Incluso ningún mensaje de error en Logcat.OnKeyListener no funciona

Ayúdame a solucionar este problema. A continuación está mi código. Por favor dime dónde estoy equivocado.

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

En el futuro, muestre un * ejemplo mínimo * que reproduzca el problema. – Qix

Respuesta

0

aquí cómo he implementado un detector de teclas en:

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

¿se está llamando a onKey cuando se presiona una tecla? –

+0

sí - este código hará algo cuando la acción de la tecla esté presionada y la tecla presionada sea dpad o intro. el problema con el código de la pregunta es que tiene KeyEvent y la acción int mezclada – eosgood

1

KeyCode s depende del teclado que se utiliza. Lo que significa que puede obtener un KeyCode diferente de diferentes teclados para la misma clave. Y recuerde, desde documentation,

View.OnKeyListener solo es útil para teclados de hardware; un método de entrada de software no tiene la obligación de activar este oyente.