Измените исходное изображение для просмотра изображения при нажатии

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

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

Solutions Collecting From Web of "Измените исходное изображение для просмотра изображения при нажатии"

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

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

Попробуй это. (Обновленный набор настроек для установки)

Лучшее решение, используйте следующий 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()); } 

Не забудьте создать поле "fun"

Попробуйте это для изменения изображения. При нажатии на изображение

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

Попробуйте под кодом: –

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

Надеюсь, тебе хочется, чтобы это было правильно?

Что для меня работало:

Я создал новый ярлык 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> 

И в моем файле макета я установил src образа imageView как:

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

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

Если у вас есть 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()); } } }); 

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

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

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

Это, по-видимому, самый короткий путь для его достижения и требует только 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" /> 

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

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

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

// u может настроить масштабирование масштаба «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); } } 
 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. 

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