R.drawable.somename 不等于 int 吗?

问题描述 投票:0回答:0

我正在使用 Palette,在使用 BitmapFactory.deodeResource() 生成位图时遇到了一些奇怪的事情 当我这样做时:

BitmapFactory.decodeResource(context.getResources(),R.drawable.somename);
一切都很好,所有色板都在生成 但我想在一个函数中使用它,这样我就可以为不同的图像生成它。 我有获取可绘制 ID 的 int id 参数,当我将代码更改为此时:
BitmapFactory.decodeResource(context.getResources(),id)
应用程序因错误而崩溃
IllegalArgumentException bitmap is not valid

更多细节这里是我的功能

    private void addUserView(Context context, String name, int id){
    Drawable drawable = AppCompatResources.getDrawable(context,id);
    int cardWidth = (int)((this.getResources().getConfiguration().screenWidthDp-10)*this.getResources().getDisplayMetrics().density)-6*(flexColumns);
    int col = (int)Math.sqrt(flexboxUsers.getFlexItemCount()+1);
    UserCardLayoutBinding userCard = UserCardLayoutBinding.inflate(getLayoutInflater());
    userCard.userCardImg.setImageDrawable(drawable);
    userCard.userCardImg.setScaleType(ImageView.ScaleType.CENTER_CROP);
    userCard.userCardImg.getLayoutParams().height = cardWidth/flexColumns/4;
    userCard.userCardImg.getLayoutParams().width = cardWidth/flexColumns/4;
    userCard.userCardName.setText(name);
    createPaletteAsync(BitmapFactory.decodeResource(context.getResources(),id),userCard.getRoot());
    CardView.LayoutParams card_params = new FrameLayout.LayoutParams(cardWidth/flexColumns, ViewGroup.LayoutParams.WRAP_CONTENT);
    card_params.setMargins(3,3,3,3);
    userCard.getRoot().setLayoutParams(card_params);
    flexboxUsers.addView(userCard.getRoot());
    if(flexColumns < col){
        flexColumns = col;
        cardWidth = (int)((this.getResources().getConfiguration().screenWidthDp-10)*this.getResources().getDisplayMetrics().density)-6*(flexColumns);
        resizeAllUserViews(cardWidth/flexColumns);
    }
}
private void resizeAllUserViews(int width){
    for (int i = 0; i < flexboxUsers.getFlexItemCount(); i++) {
        ViewGroup user = (ViewGroup) flexboxUsers.getChildAt(i);
        user.getLayoutParams().width=width;
        user.getChildAt(0).getLayoutParams().height = width/4;
        user.getChildAt(0).getLayoutParams().width = width/4;
    }
}
public void createPaletteAsync(Bitmap bitmap, View view) {
    Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
        public void onGenerated(Palette p) {
            List<Palette.Swatch> sws = p.getSwatches();
            Log.i("gg",String.valueOf(sws.isEmpty()));
            Palette.Swatch lightVibrant = p.getLightVibrantSwatch();
            Palette.Swatch vibrant = p.getVibrantSwatch();
            Palette.Swatch darkVibrant = p.getDarkVibrantSwatch();
            Palette.Swatch lightMuted = p.getLightMutedSwatch();
            Palette.Swatch muted = p.getMutedSwatch();
            Palette.Swatch darkMuted = p.getDarkMutedSwatch();
            Log.i("gg","palette");
            if(lightVibrant!=null){
                Log.i("gg","lightVibrant");
            }
            if(vibrant!=null){
                Log.i("gg","vibrant");
            }
            if(darkVibrant!=null){
                Log.i("gg","darkVibrant");
            }
            if(lightMuted!=null){
                Log.i("gg","lightMuted");
            }
            if(muted!=null){
                Log.i("gg","muted");
            }
            if(darkMuted!=null){
                Log.i("gg","darkMuted");
            }
        }
    });
}

同样,当 .decodeResource 使用 int id 时它不起作用,使用 R.drawable.imgname 一切都很好

我不知道为什么将 R.drawable.imgname 更改为对应的 int 变量不起作用,我认为它应该相等

android android-bitmap palette
© www.soinside.com 2019 - 2024. All rights reserved.