2010-11-16 2 views
17

J'ai une vue déroulante avec beaucoup de boutons d'image. Je veux changer l'image pour un bouton d'image quand il est pressé. La chose est que je veux que l'image reste jusqu'à ce que l'on appuie sur un autre bouton d'image. C'est pourquoi je ne pouvais pas utiliser un sélecteur. Quelle est la meilleure pratique pour réaliser le sien?Modifier l'image source pour l'affichage de l'image lorsqu'elle est pressée

Meilleures salutations

Répondre

32

Vous voulez faire ceci.

ImageButton Demo_button = (ImageButton)findViewById(R.id.firstimage); 

// when you click this demo button 
Demo_button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     Demo_button.setImageResource(R.drawable.secondimage); 
    } 
} 

Essayez ceci. (Mise à jour setset pour définir)

+0

Hi PrashantAdesara. Je sais que cela fonctionnerait (je devrais cependant définir l'image non sélectionnée pour la vue précédemment cliquée). Je pensais à une approche plus naturelle. Vous souhaitez créer une vue d'image personnalisée et définir l'image de ressource actuelle (par exemple, dans la méthode setSelected). Le problème est que j'ai besoin d'une méthode de vue qui est appelée lorsque la vue est sélectionnée et non sélectionnée. J'espère que c'est clair. – Gratzi

4
ImageButton Demo_button = (ImageButton)findViewById(R.id.firstimage); 
ImageButton second_button = (ImageButton)findViewById(R.id.secondimage); 

// when you click this demo button 
Demo_button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    Demo_button.setImageResource(R.drawable.secondimage); 
    second_button.setImageResource(R.drawable.firstimage); 
    } 
} 

second_button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     Demo_button.setImageResource(R.drawable.firstimage); 
     second_button.setImageResource(R.drawable.secondimage); 
    } 
} 

J'espère que tu veux comme ça ??? droit

+0

Pas vraiment. Je cherchais une vue de défilement avec des vues dans lesquelles, si vous sélectionnez une vue, la dernière sélectionnée n'est pas sélectionnée. Votre exemple fonctionne pour 2 boutons, et la sélection est faite manuellement. – Gratzi

0

Si vous enregistrez la sélection en cliquant sur, puis rechargez la galerie de défilement de l'image (ou le menu déroulant), puis rechargez et faites défiler jusqu'à la sélection avec une image remplacée, vous pourrez alors le faire. Autant que je sache, aucune des fonctions intégrées de la galerie ou du menu n'a la capacité de remplacer les images une fois qu'elles sont chargées et affichées.

+0

Je pensais à quelque chose comme la création d'un bouton personnalisé, et l'utilisation d'une méthode (comme onSelected mais à appeler avec false, quand un autre bouton est sélectionné) pour définir l'image actuelle. – Gratzi

3

le OnTouchListener est beaucoup mieux pour ce que vous avez à faire:

myImageButton.setOnTouchListener(new OnTouchListener(){ 

       public boolean onTouch(View v, MotionEvent event) { 
        switch(event.getAction()) 
        { 
        case MotionEvent.ACTION_DOWN : 
myImageButton.setImageResource(R.drawable.image_when_pressed); 
         break; 
        case MotionEvent.ACTION_UP : 
myImageButton.setImageResource(R.drawable.image_when_released); 
         break; 
        } 
        return false; 
       } 

      }); 
+0

Il est préférable d'appeler 'image.setImageResource (R.drawable.image_when_pressed)' et 'image.setImageResource (R.drawable.image_when_released)' l'un après l'autre dans 'onClick()'. Si l'utilisateur détient l'image, la ressource restera 'image_when_pressed' jusqu'à ce qu'il relâche le bouton –

0

Vous pouvez utiliser un StateListDrawable pour y parvenir. Cette méthode fonctionne également pour ImageButton s. Je préfère le réglage d'auditeurs supplémentaires.

J'ai aussi compilé une classe d'aides supplémentaires: http://alexanderwong.me/post/40799636705/android-change-background-image-drawable-on-press

public static StateListDrawable makeStateDrawable(Drawable drawable, Drawable pressedDrawable, Drawable disabledDrawable) { 
    boolean set = false; 
    StateListDrawable stateDrawable = new StateListDrawable(); 
    if (disabledDrawable != null) { 
     set = true; 
     stateDrawable.addState(new int[] { -android.R.attr.state_enabled }, disabledDrawable); 
    } 
    if (pressedDrawable != null) { 
     set = true; 
     stateDrawable.addState(new int[] { android.R.attr.state_pressed }, pressedDrawable); 
    } 
    if (drawable != null) { 
     set = true; 
     stateDrawable.addState(new int[0], drawable); 
    } 
    return set ? stateDrawable : null; 
} 
5

n'oubliez pas de créer le champ « fun »

Essayez ceci pour changer image.When imageview est pressé

Like_btn.setOnClickListener(new OnClickListener() 
     { 

      **private boolean fun = true;** 


      public void onClick(View v) 
      { 
       if(fun) 
       { 
       Like_btn.setImageResource(R.drawable.unlike); 
       fun=false; 
       } 
       else 
       { 
        fun=true;  
        Like_btn.setImageResource(R.drawable.like); 
        Toast.makeText(getApplicationContext(), "Changed", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
4

essayer ci-dessous le code: -

boolean flag=false; 
ImageButton btn = (ImageButton)findViewById(R.id.btn); 

// when you click this demo button 
btn .setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
    if (!flag) { 
     btn.setBackgroundResource(R.drawable.imageonpress); 
     flag=true; 
    } 
    else { 
      btn.setBackgroundResource(R.drawable.image); 
      flag=false; 
    } 
    } 
} 
2
float alpha_first = 0.2f; 
float alpha_second = 1.0f; 
    AlphaAnimation alphadp = new AlphaAnimation(alpha_second, alpha_first); 
     switch (v.getId()) { 
     case R.id.disable_deactivate_pic: 
     ImageButton disable_button =(ImageButton)findViewById(R.id.disable_deactivate_pic); 
       if (!flag) { 
        disable_button.setImageResource(R.drawable.enable_active); 

        linearLayout_for_picture = (LinearLayout) findViewById(R.id.linearlayout_imageView_pic); 

       alphadp.setFillAfter(true); 
       linearLayout_for_picture.startAnimation(alphadp); 
       flag=true; 
       } 
     else { 
        disable_button.setImageResource(R.drawable.disable_active); 
        alphadp.setFillAfter(false); 
        linearLayout_for_picture.startAnimation(alphadp); 
        flag=false; 
       } 

      break; 
-1
Demo_button.setImageResource(R.drawable.secondimage) 

//Demo_button is your event holder (the button or imageview or bitmap file which contains the image) and secondimage is your image (drawable) file, without any complications. 

Cela fait l'affaire.

19

Une meilleure solution, utilisez le code XML suivant en tant que source de l'image:

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item android:state_activated="true"> 
      <bitmap android:src="@drawable/image_selected"/> 
     </item> 
     <item> 
      <bitmap android:src="@drawable/image_not_selected"/> 
     </item> 
    </selector> 

    @Override 
    public void onClick(View v) { 
     v.setActivated(!v.isActivated()); 
    } 
+0

Voir aussi ma réponse qui est plus courte et qui ne nécessite pas de code Java: https://stackoverflow.com/a/45239629/245966 (et il génère aussi un aperçu dans Android Studio) –

4

Ce qui a fonctionné pour moi était:

J'ai créé un nouveau fichier xml drawable, par exemple, image_state.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
     <bitmap android:src="@drawable/image_pressed"/> 
    </item> 
    <item> 
     <bitmap android:src="@drawable/image"/> 
    </item> 
</selector> 

Et dans mon dossier de mise en page, je mis le src de la imageView comme:

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/image_state"/> 
0

si vous avez un ImageView ou ImageButton et que vous voulez changer l'image de que lorsque son pressé, vous pouvez rafraîchir l'activité pour tout pressé:

fav.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      int isFavor = c.getInt(c.getColumnIndex("isFavor")); 
      if(isFavor == 1){ 
       db.execSQL("update content set isFavor=0 where ID="+idxx+";"); 
       fav.setImageResource(R.drawable.favnot_ic); 

       Toast.makeText(context.getApplicationContext(),"item cleaned",Toast.LENGTH_LONG).show(); 
       activity.finish(); 
       activity.overridePendingTransition(0, 0); 
       context.startActivity(activity.getIntent()); 
      } 
      else{ 
       db.execSQL("update content set isFavor=1 where ID=" + idxx + ";"); 
       fav.setImageResource(R.drawable.fav_ic); 
       Toast.makeText(context.getApplicationContext(),"Item added...",Toast.LENGTH_LONG).show(); 
       activity.finish(); 
       activity.overridePendingTransition(0, 0); 
       context.startActivity(activity.getIntent()); 
      } 
     } 
    }); 
4

Cela semble être le plus court chemin pour y parvenir, et ne nécessite que XML, pas de code Java:

Enregistrez le fichier sous drawable/image_pressable.xml à côté des deux images:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/image_pressed" android:state_pressed="true" /> 
    <item android:drawable="@drawable/image_regular" /> 
</selector> 

alors faire référence comme:

<ImageView android:src="@drawable/image_pressable" /> 
0

si u ont déjà un bouton dans ur application qui sera faire le swap entre les deux photos que vous avez quand il est cliqué puis il y a un simple Code: D

// pour ajouter des images dans android nous simplement "Copiez-les de leur emplacement et d passé (res -> drawable) "

// puis faites glisser-déposer "ImageView" et sélectionnez l'image u souhaitez afficher

// u peut ajuster le jet d'échelle" scaleType, layout_Width & layout_Height "

public boolean swap = true; 

public void change(View view) 
{ 
    ImageView i = (ImageView) findViewById(R.id.img); 
    if (swap) 
    { 
     i.setImageResource(R.drawable.images); 
     swap=false; 
    } 
    else 
    { 
     swap=true; 
     i.setImageResource(R.drawable.couple); 
    } 

} 
Questions connexes