2010-11-16 2 views
17

У меня есть прокрутка с большим количеством кнопок изображения. Я хочу изменить изображение для кнопки изображения при нажатии. Дело в том, что я хочу, чтобы изображение осталось до нажатия другой кнопки изображения. Вот почему я не мог использовать селектор. Какова наилучшая практика для его достижения?Измените исходное изображение для просмотра изображения при нажатии

С наилучшими пожеланиями

ответ

32

Вы хотите это сделать.

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

Попробуйте это. (Обновлено setset установить)

+0

Hi PrashantAdesara. Я знаю, что это сработало бы (я должен был бы установить невыбранное изображение для предыдущего щелкнутого представления, хотя). Я думал о более естественном подходе. Как создать собственное изображение и установить текущий образ ресурса (например, в методе setSelected). Проблема в том, что мне нужен метод представления, который вызывается, когда представление выбрано и не выбрано. Надеюсь, это понятно. – 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); 
    } 
} 

Я надеюсь, что у хочу, как это право ???

+0

Не совсем. Я искал вид прокрутки с представлениями, в котором, если вы выберете представление, последний выбранный не выбран. Ваш пример работает для 2 кнопок, и выбор выполняется вручную. – Gratzi

0

Если вы сохраняете выделение по щелчку, а затем перезагружаете галерею прокрутки изображения (или меню прокрутки), а затем перезагружаете и прокручиваете выделение с помощью замещенного изображения, тогда вы можете это сделать. Насколько я знаю, ни одна из встроенных функций галереи или меню не имеет возможности заменять изображения после их загрузки и отображения.

+0

Я думал о создании пользовательской кнопки и использовании метода (например, onSelected, но для вызова с ложным, когда выбрана другая кнопка) для установки текущего изображения. – Gratzi

3

OnTouchListener намного лучше то, что вы должны сделать:

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

Это лучше, чем вызов 'image.setImageResource (R.drawable.image_when_pressed)' и 'image.setImageResource (R.drawable.image_when_released)' один за другим в 'onClick()'. Если пользователь держит изображение, ресурс останется «image_when_pressed» до тех пор, пока они не отпустят кнопку –

0

Вы можете использовать StateListDrawable для достижения этой цели. Этот метод также работает для ImageButton. Я предпочитаю устанавливать дополнительные слушатели.

Я также составил класс дополнительных помощников: 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

не забудьте создать поле «прикольное»

Попробуйте для изменения image.When ImageView нажимаются

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

попытка ниже код: -

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. 

Это делает трюк.

19

Лучшее решение, используйте следующий XML в качестве источника изображения:

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

См. Также мой ответ, который короче и не требует кода Java: https://stackoverflow.com/a/45239629/245966 (и также он создает предварительный просмотр в Android Studio) –

4

То, что сработало для меня было:

Я создал новый Drawable файл XML, например, в силу 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> 

И в моем файле макета, я поставил ГКЗ ImageView как:

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

, если у вас есть ImageView или ImageButton и хотите изменить изображение, что при его нажатии, вы можете обновить активность для любого прессованного:

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

Это, кажется, самый короткий путь для ее достижения, и требует только XML, без кода Java:

Сохраните файл Drawable/image_pressable.xml рядом с двумя изображениями:

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

затем ссылаться на него как:

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

, если у вас уже есть кнопка в Уре приложение, которое будет сделайте своп между двумя фотографиями, которые у вас есть, когда он щелкнул, тогда есть простой код: D

// для добавления изображений в android мы просто «скопируем их из своего местоположения и в прошлом (r эс -> вытяжка)»

// а затем перетащить "ImageView" и выберите изображение и хочет, чтобы отобразить

// и можно регулировать масштаб броска "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); 
    } 

} 
Смежные вопросы