2017-08-12 7 views
0

プリアンブル

私は30分前からg00glingしていますが、私は本当に重要なものを見逃しているようです。(Expandable)ListAdapterの下でImageViewの色合いを設定するには?

注:は、私はすでにこれらの質問

How to change color of vector drawable path on button click
How to set tint for an image view programmatically in android?
Changing ImageView source

のためのソリューションを試したこれらのソリューションは、ALL ImageViewのをSRCS色を変更いずれか、または、彼らは行いません。何でも(ベクトルは黒のままです)。

私の描画可能な材料iconsディレクトリからベクトル資産である:

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:width="24dp" 
    android:height="24dp" 
    android:viewportWidth="24.0" 
    android:viewportHeight="24.0"> 

    <path 
     android:fillColor="#FF000000" 
     android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2z" /> 
</vector> 

マイImageViewの:

<ImageView 
     android:id="@+id/gradeBullet" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginStart="25.5dp" 
     android:layout_marginTop="25.5dp" 
     app:srcCompat="@drawable/importantgrade" /> 

私も思いますので、私は、*のcompatでこれをやりたいです以前のAPI(API> 17)をサポートしています。

マイImageViewの:ImageView gradeBullet = convertView.findViewById(R.id.gradeBullet);

てみI.

MyAmazingAdapter.java - getChildView(...)

gradeBullet.setColorFilter(ContextCompat.getColor(context, gradeObj.colorId), PorterDuff.Mode.MULTIPLY); 

結果:何もしません。

Try II。

MyAmazingAdapter.java - getChildView(...)

DrawableCompat.setTint(gradeBullet.getDrawable(), ContextCompat.getColor(context, R.color.myColor)); 

結果:すべてを復色します。

Try III。

MyAmazingAdapter.java - getChildView(...)

VectorDrawableCompat drawable = (VectorDrawableCompat) gradeBullet.getDrawable(); 
drawable.setTint(ContextCompat.getColor(context, gradeObj.colorId)); 
gradeBullet.setImageDrawable(drawable); 

結果:奇妙な色を与えます。 (間違いなく私が望むものではなく、元の色に近い)

IVを試してください。

上記のすべては、finalグレードのバレットで、同じ結果が得られました。

いくつかの他の情報

  • gradeObj.colorIdごと childView異なっています。
  • SVGの代わりに図形とsetColorを使用すると、ではなく、となります。
  • あなただけのコメントでそれを言及、より多くの情報が欲しい場合は26
  • MyAmazingAdapter.javaがBaseExpandableListAdapter

を拡張LVL現在はAPIを使用してテスト。

答えて

1

ではなく、PorterDuff.Mode.SRC_INまたはPorterDuff.Mode.SRC_ATOPで最初の方法を試すことができます。

PorterDuff.mode

は、この情報がお役に立てば幸いです。

+0

大変ありがとうございます! 'SRC_ATOP'が機能しました! – ForceMagic

+1

あなたは歓迎です、私はより多くの説明のためのドキュメントのリンクを追加します:) – Cochi

関連する問題