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

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

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

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

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. 

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

Intereting Posts
Невозможно подключиться к Google Cloud Connection Server Сохранить арриалист строк для общих настроек Android + Scala + Intellij 13 Диспетчер файловой системы устройства пуст для эмулятора nougat Как прочитать файл в битовой карте Java? Можно ли повторно использовать намерение? Неправильное дешифрование с использованием AES / CBC / PKCS5Padding в Android Android M ярлык установить / удалить дублирование Количество шагов, полученных с помощью Google Fit Api, не соответствует количеству шагов, отображаемому в официальном приложении Google Fit Синхронизировать весь ListView в ViewPager Масштабирование и панорамирование вида в андроиде Android Studio Gradle не может найти «com.android.support:design:22.2.0» (библиотека поддержки дизайна Android) Как сделать любой цветной код html полупрозрачным Как добавить эффект скручивания в представлении пейджер Должно ли postDelayed вызывать сообщение для перехода в очередь?