2017-09-09 2 views
0

Je suis glisser mes images en utilisant la classe viewflipper dans android.J'ai tableau d'image. Maintenant, chaque image a sa propre fonctionnalité. Pour l'exemple, la première image devrait m'amener à une autre activité et de même d'autres. Ce que je veux faire est de faire clic de chaque image pour que je puisse effectuer différentes tâches en fonction de l'image. Voici mon code:Image Cliquez sur l'écouteur en utilisant la classe Viewflipper dans android

public class gesture extends AppCompatActivity { 
private ViewFlipper mViewFlipper; 
private GestureDetector mGestureDetector; 
MediaPlayer mp; 
int i; 
int a=0; 
ImageView imageView; 

int[] image = { 
     R.drawable.p1, 
     R.drawable.p2, 
     R.drawable.p3, 
     R.drawable.p4, 
     R.drawable.p5, 
     R.drawable.p6 
}; 
int[] audio={ 
     R.raw.p1, 
     R.raw.p2, 
     R.raw.p3, 
     R.raw.p4, 
     R.raw.p5, 
     R.raw.p6 

}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gesture); 
    CustomGestureDetector customGestureDetector = new CustomGestureDetector(); 
    mGestureDetector = new GestureDetector(this, customGestureDetector); 


    // Get the ViewFlipper 
    mViewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper); 


    if (mp != null) { 
     mp.stop(); 
     mp.release(); 
    } 
    mp = MediaPlayer.create(gesture.this, audio[a]); 
    mp.start(); 


    // Add all the images to the ViewFlipper 
    for (i = 0; i < image.length; i++) { 
     imageView = new ImageView(this); 

     imageView.setImageResource(image[i]); 
     mViewFlipper.addView(imageView); 

      } 


} 

class CustomGestureDetector extends GestureDetector.SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

     // Swipe left (next) 
     if (e1.getX() > e2.getX()) { 

      if (mp != null) { 
       mp.stop(); 
       mp.release(); 
      } 


       a++; 
      if (a==6){ 
       a=0; 
      } 
       mp = MediaPlayer.create(gesture.this, audio[a]); 
       mp.start(); 
       mViewFlipper.showNext(); 


     } 

     // Swipe right (previous) 
     if (e1.getX() < e2.getX()) { 

      if (mp != null) { 
       mp.stop(); 
       mp.release(); 
      } 

      a--; 
      if(a==-1){ 
       a=5; 
      } 
       mp = MediaPlayer.create(gesture.this, audio[a]); 
       mp.start(); 
       mViewFlipper.showPrevious(); 



     } 

     return super.onFling(e1, e2, velocityX, velocityY); 


    } 

} 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    mGestureDetector.onTouchEvent(event); 

    return super.onTouchEvent(event); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return false; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 

    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return false; 
    } 
    return super.onOptionsItemSelected(item); 
} 

Merci à l'avance.

Répondre

0

d'abord mettre en œuvre OnClickListener dans votre activité

public class gesture extends AppCompatActivity implements View.OnClickListener { 

donnent alors un identifiant à chacune des images

for (i = 0; i < image.length; i++) { 
    imageView = new ImageView(this); 

    imageView.setImageResource(image[i]); 
    imageView.setId(i); // <---- assigning id 
    mViewFlipper.addView(imageView); 

} 

Enfin, gérer les clics:

@Override 
public void onClick(View v) { 
    Class<?> c = null; 
    int imageId = v.getId(); 

    try { 
     c = Class.forName("ActivityToStartOn"+imageId); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Intent intent = new Intent(gesture.this, c); 
    startActivity(intent); 

} 

REMARQUE: Je suppose que les activités que vous voulez mettre en vedette t sont nommés ActivityToStartOn0, ActivityToStartOn1, ....

+0

Merci pour votre réponse! Mais si j'ai plus de 50 images alors que puis-je faire ??? –

+0

@UzairQaiser voir ma réponse mise à jour. Je n'ai pas essayé, mais vous aurez une idée de la façon de le gérer. – mrid

+0

Erreur dans votre code: La déclaration doit être ajoutée au début avec l'étiquette de cas. –