2010-11-16 18 views
17

Mam widok przewijania z dużą ilością przycisków graficznych. Chcę zmienić obraz przycisku obrazu po jego naciśnięciu. Chodzi o to, że chcę, aby obraz pozostał, dopóki nie zostanie naciśnięty inny przycisk obrazu. Dlatego nie mogłem użyć selektora. Jaka jest najlepsza praktyka do osiągnięcia jego?Zmiana obrazu źródłowego widoku obrazu po naciśnięciu

Pozdrowienia

Odpowiedz

32

Chcesz to zrobić.

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); 
    } 
} 

Spróbuj tego. (zaktualizowano zestaw do ustawienia)

+0

Cześć PrashantAdesara. Wiem, że to zadziała (musiałbym jednak ustawić niezaznaczony obraz dla widoku z poprzedniego kliknięcia). Myślałem o bardziej naturalnym podejściu. Jak utworzyć niestandardowy widok obrazu i ustawić tam bieżący obraz zasobów (na przykład w metodzie setSelected). Problem polega na tym, że potrzebuję metody widoku, która jest wywoływana, gdy widok jest zaznaczony i odznaczony. Mam nadzieję, że to jest jasne. – 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); 
    } 
} 

Mam nadzieję, że ci się spodoba Dobrze ???

+0

Niezupełnie. Szukałem widoku przewijania z widokami, w którym, jeśli wybierzesz widok, ostatni zaznaczony zostanie odznaczony. Twój przykład działa na 2 przyciski, a wybór odbywa się ręcznie. – Gratzi

0

Zapisanie zaznaczenia po kliknięciu, a następnie ponowne załadowanie galerii przewijania obrazu (lub menu przewijania), a następnie ponowne załadowanie i przewinięcie do zaznaczenia z zastąpionym obrazem, może być możliwe. O ile mi wiadomo, żadna z wbudowanych funkcji galerii ani menu nie ma możliwości zamiany obrazów po ich załadowaniu i wyświetleniu.

+0

Zastanawiałem się nad utworzeniem niestandardowego przycisku i użyciem metody (np. OnSelected, ale w przypadku wyboru innego przycisku), aby ustawić bieżący obraz. – Gratzi

3

OnTouchListener jest znacznie lepiej, co trzeba zrobić:

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

To lepsze niż wywoływanie 'image.setImageResource (R.drawable.image_when_pressed)' i 'image.setImageResource (R.drawable.image_when_released)' jeden po drugim w 'onClick()'. Jeśli użytkownik zatrzyma obraz, zasób pozostanie "image_when_pressed", dopóki nie zwolni przycisku –

0

Można użyć StateListDrawable do osiągnięcia tego celu. Ta metoda działa również dla ImageButton s. Preferuję to ustawienie dodatkowych słuchaczy.

Ja również skompilowana klasę dodatkowych pomocników: 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

nie zapomnij, aby utworzyć pole „zabawa”

Wypróbuj zmiany image.When ImageView jest wciśnięty

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

try poniżej kodu: -

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. 

To załatwia sprawę.

19

lepsze rozwiązanie, należy użyć następującego kodu xml jako źródło obrazka:

<?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

Zobacz także moją odpowiedź, która jest krótsza i nie wymaga kodu Java: https://stackoverflow.com/a/45239629/245966 (i również generuje podgląd w Android Studio) –

4

Co pracował dla mnie było:

stworzyłem nową rozciągliwej pliku xml, dla np, 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> 

A w moim pliku układu, ustawić SRC z ImageView jak:

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

jeśli masz ImageView lub ImageButton i chcesz zmienić obraz, który po jego naciśnięciu można odśwież aktywność dla każdego wciśnięty:

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

To wydaje się być najkrótsza droga do jego osiągnięcia i wymaga tylko XML, bez kodu Java:

Zapisz plik jako rozciągliwej/image_pressable.xml obok dwóch obrazów:

<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> 

następnie odwołać go jako:

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

jeśli u mieć już przycisk ur aplikacji, które będą Zrób zamień między dwoma zdjęciami, gdy klikniesz, a potem pojawi się prosty kod: D

// aby dodać obrazy w Androidzie po prostu "Skopiuj je z ich lokalizacji d przeszłość (RES -> odkształcalne) "

// następnie przeciągnij i upuść "ImageView" i wybierz obraz ma być wyświetlany u

// u można dostosować rzut skalę" 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); 
    } 

}