2017-09-25 12 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

안드로이드 킷캣 : 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에서 제대로 작동하지 않습니다. –