2017-09-25 5 views
0

KitKatで無作為に生成された色でListViewを作成しようとしています。
問題:異なるアイテムには同じ色しか表示されません。KitKatでランダムな色のListViewアイテムを作成するには

Drawable d = getResources().getDrawable(R.drawable.main_item_image_background); 
     int r = (int) (Math.random() * 256); 
     int g = (int) (Math.random() * 256); 
     int b = (int) (Math.random() * 256); 

     int randColor = Color.argb(255, r, g, b); 

     d.setColorFilter(new PorterDuffColorFilter(randColor, PorterDuff.Mode.SRC_IN)); 
     viewHolder.ivLogoBackground.setImageDrawable(d); 

は、私はまた、このようにそれを実行しようとしました:

Random rand = new Random(); 
int r = rand.nextInt(256); 
int g = rand.nextInt(256); 
int b = rand.nextInt(256); 

それはロリポップ以上にうまく動作しますが、キットカットの上に、それは項目ごとに同じ色を示し
は、ここに私のコードです。 私はこの問題はd.setColorFilter(new PorterDuffColorFilter(randColor, PorterDuff.Mode.SRC_IN));

アンドロイドMであることを考える:Android M

Androidのキットカット:KitKat

ソリューション:Drawablemutate()メソッドを持っている必要があります。次いで、リスト項目の画像が異なる色であろう:)

+0

[この回答](HTTPS:/ /stackoverflow.com/a/32048294/6891637)が役立ちます。 –

+0

@Ajil O残念ながら、私のスクリーンショットは、 'setColorFilter'メソッドが動作していることを示しています。しかし、色はランダムに生成されません。 –

+0

ドロアブルはどのように見えますか? –

答えて

0

///アダプタクラス

public class TestAdapter extends RecyclerView.Adapter<TestAdapter.CustomViewHolder> { 
private ColorGenerator generator; 
private Activity mActivity; 
private ArrayList<String> iDataList; 
public TestAdapter(Activity activity, ArrayList<String> countryList, int limit, boolean isLiveCountry) { 
    this.mActivity = activity; 
    generator = ColorGenerator.MATERIAL; 
} 

@Override 
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item, parent, false); 
    return new CustomViewHolder(view); 
} 

@Override 
public void onBindViewHolder(CustomViewHolder holder, final int position) { 

    int color = generator.getRandomColor(); 
    holder.view.setBackgroundColor(color); 
} 

@Override 
public int getItemCount() { 
    return iDataList.size(); 

} 
public class CustomViewHolder extends RecyclerView.ViewHolder { 
    private View view; 

    public CustomViewHolder(View itemView) { 
     super(itemView); 
     view = itemView.findViewById(R.id.view); 
    } 
} 

}

//カラージェネレータ

public class ColorGenerator { 
public static ColorGenerator DEFAULT; 

public static ColorGenerator MATERIAL; 

static { 
    DEFAULT = create(Arrays.asList(
      0xfff16364, 
      0xfff58559, 
      0xfff9a43e, 
      0xffe4c62e, 
      0xff67bf74, 
      0xff59a2be, 
      0xff2093cd, 
      0xffad62a7, 
      0xff805781 
    )); 
    MATERIAL = create(Arrays.asList(
      0xffe57373, 
      0xfff06292, 
      0xffba68c8, 
      0xff9575cd, 
      0xff7986cb, 
      0xff64b5f6, 
      0xff4fc3f7, 
      0xff4dd0e1, 
      0xff4db6ac, 
      0xff81c784, 
      0xffaed581, 
      0xffff8a65, 
      0xffd4e157, 
      0xffffd54f, 
      0xffffb74d, 
      0xffa1887f, 
      0xff90a4ae 
    )); 
} 

private final List<Integer> mColors; 
private final Random mRandom; 

public static ColorGenerator create(List<Integer> colorList) { 
    return new ColorGenerator(colorList); 
} 

private ColorGenerator(List<Integer> colorList) { 
    mColors = colorList; 
    mRandom = new Random(System.currentTimeMillis()); 
} 

public int getRandomColor() { 
    return mColors.get(mRandom.nextInt(mColors.size())); 
} 

public int getColor(Object key) { 
    return mColors.get(Math.abs(key.hashCode()) % mColors.size()); 
} 
+0

ありがとうございます。これは私が探しているものではないと思います。 –

+0

これは、listviewまたはrecyleViewの各項目に対してランダムな色を生成します。それはあなたが求めていることですよね? – AndroidAnDandroid

+0

これは、色のリストからランダムな色を生成します。しかし、私は色の全範囲から無作為に取得する必要があります。もう一度、この答えはKitKatで正しく機能していません。 –

関連する問題