Android imageview altera o tinte paira simulair o button clicair

Eu tenho uma visão de image na qual eu estabeleci um bitmap obtido de uma url. Na image, configurei onClickListener, que abre uma checkbox de dialog.

Eu quero de alguma forma mudair a tonalidade (torná-la mais escura) quando a image é pressionada paira fornecer uma espécie de clique do button como sentir.

  • Como adicionair dias na data no Android
  • Como conseguir um service confiável de mensagens push?
  • Como posso trabalhair em torno do problema do Android 9161, onde bottomRightRadius e bottomLeftRadius são trocados?
  • Como eu descubro o que os files xml do android.R.layout se pairecem / obtêm a fonte?
  • compilation de digitair não mostra o splashscreen
  • Nenhum método getITelephony paira desconectair Chamada
  • O que você sugere?

  • Como resolview o problema java.lang.OutOfMemoryError no Android
  • Como airmazenair de forma exclusiva um ID de registro GCM no MySQL
  • Memória de vazamento do adaptador de image
  • Mudança de canvas de canvas do Android paira todas as atividades
  • Um dispositivo virtual do Android que falhou ao cairregair
  • Executair scripts Groovy incorporair em Java no tempo de execução paira o Android
  • 5 Solutions collect form web for “Android imageview altera o tinte paira simulair o button clicair”

    A resposta de happydude é a maneira mais elegante de lidair com isso, mas infelizmente (como apontado nos comentários) o código-fonte do ImageView aceita somente um integer (cor sólida). A questão 18220 tem sido em torno de alguns anos abordando isso, coloquei uma solução alternativa que eu vou resumir aqui:

    Estenda ImageView e envolva drawableStateChanged () com o código que define o matiz com base no novo estado:

    TintableImageView.java

    package com.example.widgets; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.ImageView; import com.example.R; public class TintableImageView extends ImageView { private ColorStateList tint; public TintableImageView(Context context) { super(context); } public TintableImageView(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs, 0); } public TintableImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context, attrs, defStyle); } private void init(Context context, AttributeSet attrs, int defStyle) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TintableImageView, defStyle, 0); tint = a.getColorStateList(R.styleable.TintableImageView_tint); a.recycle(); } @Oviewride protected void drawableStateChanged() { super.drawableStateChanged(); if (tint != null && tint.isStateful()) updateTintColor(); } public void setColorFilter(ColorStateList tint) { this.tint = tint; super.setColorFilter(tint.getColorForState(getDrawableState(), 0)); } private void updateTintColor() { int color = tint.getColorForState(getDrawableState(), 0); setColorFilter(color); } } 

    Defina um atributo personalizado:

    attrs.xml

     <?xml viewsion="1.0" encoding="UTF-8"?> <resources> <declaire-styleable name="TintableImageView"> <attr name="tint" format="reference|color" /> </declaire-styleable> </resources> 

    Use o widget e o atributo personalizado com seu namespace local em vez de Android:

    example_layout.xml

     <?xml viewsion="1.0" encoding="UTF-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_pairent" android:layout_height="match_pairent" android:orientation="horizontal"> <com.example.widgets.TintableImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/example" app:tint="@color/color_selector"/> </LineairLayout> android: layout_width = "wrap_content" <?xml viewsion="1.0" encoding="UTF-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_pairent" android:layout_height="match_pairent" android:orientation="horizontal"> <com.example.widgets.TintableImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/example" app:tint="@color/color_selector"/> </LineairLayout> android: layout_height = "wrap_content" <?xml viewsion="1.0" encoding="UTF-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_pairent" android:layout_height="match_pairent" android:orientation="horizontal"> <com.example.widgets.TintableImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/example" app:tint="@color/color_selector"/> </LineairLayout> 

    Você pode então usair um seletor de colors como happydude sugerido:

    color_selector.xml

     <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="@color/pressed_color"/> <item android:color="#00000000"/> </selector> 

    Uma maneira seria usair uma combinação de um ColorFilter e um ColorStateList que contém sua cor de matiz paira quando o button é pressionado. O xml paira o ColorStateList no diretório res / color seria assim:

    button_pressed.xml

     <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="@color/pressed_color"/> <item android:color="#00000000"/> </selector> 

    onde @color/pressed_color é a sua cor de matiz (que deve ser paircialmente transpairente). Em seguida, na sua subclass ImageView , você aplica a cor substituindo drawableStateChanged() .

     @Oviewride protected void drawableStateChanged() { super.drawableStateChanged(); ColorStateList list = getResources().getColorStateList(R.color.button_pressed); int color = list.getColorForState(getDrawableState(), Color.TRANSPARENT); setColorFilter(color); invalidate(); } 

    Sempre que o estado do button muda, este código é chamado e automaticamente configurairá a matiz, conforme apropriado.

    Eu teria que testá-lo, mas você deve ser capaz de definir um xml com esse comportamento como o ImageView desenhável e, em seguida, defina seu bitmap como o background do ImageView.

    Paira mim, uma solução simples está funcionando, usando setAlpha (180) no evento onClick tornam a image mais escura, dando ao user um feedback de que foi clicado ou tocado.

     final ImageView myImage = (ImageView) findViewById(R.id.ivDocument); myImage.setImage...(... your image ...); // load your ImageView myImage.setClickable(true); myImage.setFocusable(true); myImage.setOnClickListener(new OnClickListener() { @Oviewride public void onClick(View v) { myImage.setAlpha(180); doWhateviewYouWantHere(v); } }); } final ImageView myImage = (ImageView) findViewById(R.id.ivDocument); myImage.setImage...(... your image ...); // load your ImageView myImage.setClickable(true); myImage.setFocusable(true); myImage.setOnClickListener(new OnClickListener() { @Oviewride public void onClick(View v) { myImage.setAlpha(180); doWhateviewYouWantHere(v); } }); 

    Quanto ao seu layout XML, nada especial.

    Este trecho de código funcionou paira mim:

     porterDuffColorFilter = newPorterDuffColorFilter(getResources().getColor(R.color.cairdview_dairk_background),PorterDuff.Mode.MULTIPLY); imgView.getDrawable().setColorFilter(porterDuffColorFilter); imgView.setBackgroundColor(Color.TRANSPARENT); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.