位图与 R.drawable

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

我正在制作一个应用程序,允许用户上传自己的图像。该应用程序首先使用 R.drawable,但由于我希望用户上传他们自己的图像,所以我必须将所有内容更改为位图。

现在我收到一个错误,据我所知,这是因为 CPU 过载。对于 RecycleView 使用 R.drawable 而不是 Bitmaps 更好吗?

这是代码:

public void addBasicDices(){
    if (DicesList == null){
        DicesList = new ArrayList<>();
    }
    if (DicesList.size() < 8){
        //Clears the list to avoid having twice the amount of dices in case of being less than 8 (E.g when I update the minimum amount of basic dices, adding d100 for example)
        DicesList.clear();

        //Add coin to DicesList
        Dice2R.add(R.drawable.coin_tail);
        Dice2R.add(R.drawable.coin_head);
        diceicon = BitmapFactory.decodeResource(this.getResources(), R.drawable.coin_head);
        for (int i = 0; i<Dice2R.size(); i++){
            diceface = BitmapFactory.decodeResource(this.getResources(), Dice2R.get(i));
            Dice2.add(diceface);
        }
        DicesList.add(new DiceClass(diceicon, Dice2));
        //Add dice4 to DicesList
        Dice4R.add(R.drawable.dice4_1);
        Dice4R.add(R.drawable.dice4_2);
        Dice4R.add(R.drawable.dice4_3);
        Dice4R.add(R.drawable.dice4_4);
        diceicon = BitmapFactory.decodeResource(this.getResources(), R.drawable.dice4_4);
        for (int i = 0; i<Dice4R.size(); i++){
            diceface = BitmapFactory.decodeResource(this.getResources(), Dice4R.get(i));
            Dice4.add(diceface);
        }
        DicesList.add(new DiceClass(diceicon, Dice4));
        //Add dice6 to DicesList
        Dice6R.add(R.drawable.dice6_1);
        Dice6R.add(R.drawable.dice6_2);
        Dice6R.add(R.drawable.dice6_3);
        Dice6R.add(R.drawable.dice6_4);
        Dice6R.add(R.drawable.dice6_5);
        Dice6R.add(R.drawable.dice6_6);
        diceicon = BitmapFactory.decodeResource(this.getResources(), R.drawable.dice6_6);
        for (int i = 0; i<Dice6R.size(); i++){
            diceface = BitmapFactory.decodeResource(this.getResources(), Dice6R.get(i));
            Dice6.add(diceface);
        }
        DicesList.add(new DiceClass(diceicon, Dice6));
        //Add dice8 to DicesList
        Dice8R.add(R.drawable.dice8_1);
        Dice8R.add(R.drawable.dice8_2);
        Dice8R.add(R.drawable.dice8_3);
        Dice8R.add(R.drawable.dice8_4);
        Dice8R.add(R.drawable.dice8_5);
        Dice8R.add(R.drawable.dice8_6);
        Dice8R.add(R.drawable.dice8_7);
        Dice8R.add(R.drawable.dice8_8);
        diceicon = BitmapFactory.decodeResource(this.getResources(), R.drawable.dice8_8);
        for (int i = 0; i<Dice8R.size(); i++){
            diceface = BitmapFactory.decodeResource(this.getResources(), Dice8R.get(i));
            Dice8.add(diceface);
        }
        DicesList.add(new DiceClass(diceicon, Dice8));
        //Add dice10 to DicesList
        Dice10R.add(R.drawable.dice10_1);
        Dice10R.add(R.drawable.dice10_2);
        Dice10R.add(R.drawable.dice10_3);
        Dice10R.add(R.drawable.dice10_4);
        Dice10R.add(R.drawable.dice10_5);
        Dice10R.add(R.drawable.dice10_6);
        Dice10R.add(R.drawable.dice10_7);
        Dice10R.add(R.drawable.dice10_8);
        Dice10R.add(R.drawable.dice10_9);
        Dice10R.add(R.drawable.dice10_10);
        diceicon = BitmapFactory.decodeResource(this.getResources(), R.drawable.dice10_10);
        for (int i = 0; i<Dice10R.size(); i++){
            diceface = BitmapFactory.decodeResource(this.getResources(), Dice10R.get(i));
            Dice10.add(diceface);
        }
        DicesList.add(new DiceClass(diceicon, Dice10));
        //Add dice12 to DicesList
        Dice12R.add(R.drawable.dice12_1);
        Dice12R.add(R.drawable.dice12_2);
        Dice12R.add(R.drawable.dice12_3);
        Dice12R.add(R.drawable.dice12_4);
        Dice12R.add(R.drawable.dice12_5);
        Dice12R.add(R.drawable.dice12_6);
        Dice12R.add(R.drawable.dice12_7);
        Dice12R.add(R.drawable.dice12_8);
        Dice12R.add(R.drawable.dice12_9);
        Dice12R.add(R.drawable.dice12_10);
        Dice12R.add(R.drawable.dice12_11);
        Dice12R.add(R.drawable.dice12_12);
        diceicon = BitmapFactory.decodeResource(this.getResources(), R.drawable.dice12_12);
        for (int i = 0; i<Dice12R.size(); i++){
            diceface = BitmapFactory.decodeResource(this.getResources(), Dice12R.get(i));
            Dice12.add(diceface);
        }
        DicesList.add(new DiceClass(diceicon, Dice12));
        //Add dice20 to DicesList
        Dice20R.add(R.drawable.dice20_1);
        Dice20R.add(R.drawable.dice20_2);
        Dice20R.add(R.drawable.dice20_3);
        Dice20R.add(R.drawable.dice20_4);
        Dice20R.add(R.drawable.dice20_5);
        Dice20R.add(R.drawable.dice20_6);
        Dice20R.add(R.drawable.dice20_7);
        Dice20R.add(R.drawable.dice20_8);
        Dice20R.add(R.drawable.dice20_9);
        Dice20R.add(R.drawable.dice20_10);
        Dice20R.add(R.drawable.dice20_11);
        Dice20R.add(R.drawable.dice20_12);
        Dice20R.add(R.drawable.dice20_13);
        Dice20R.add(R.drawable.dice20_14);
        Dice20R.add(R.drawable.dice20_15);
        Dice20R.add(R.drawable.dice20_16);
        Dice20R.add(R.drawable.dice20_17);
        Dice20R.add(R.drawable.dice20_18);
        Dice20R.add(R.drawable.dice20_19);
        Dice20R.add(R.drawable.dice20_20);
        diceicon = BitmapFactory.decodeResource(this.getResources(), R.drawable.dice20_20);
        for (int i = 0; i<Dice20R.size(); i++){
            diceface = BitmapFactory.decodeResource(this.getResources(), Dice20R.get(i));
            Dice20.add(diceface);
        }
        DicesList.add(new DiceClass(diceicon, Dice20));
        //Add dice100 to DicesList
        Dice100R.add(R.drawable.dice100_1);
        Dice100R.add(R.drawable.dice100_2);
        Dice100R.add(R.drawable.dice100_3);
        Dice100R.add(R.drawable.dice100_4);
        Dice100R.add(R.drawable.dice100_5);
        Dice100R.add(R.drawable.dice100_6);
        Dice100R.add(R.drawable.dice100_7);
        Dice100R.add(R.drawable.dice100_8);
        Dice100R.add(R.drawable.dice100_9);
        Dice100R.add(R.drawable.dice100_10);
        Dice100R.add(R.drawable.dice100_11);
        Dice100R.add(R.drawable.dice100_12);
        Dice100R.add(R.drawable.dice100_13);
        Dice100R.add(R.drawable.dice100_14);
        Dice100R.add(R.drawable.dice100_15);
        Dice100R.add(R.drawable.dice100_16);
        Dice100R.add(R.drawable.dice100_17);
        Dice100R.add(R.drawable.dice100_18);
        Dice100R.add(R.drawable.dice100_19);
        Dice100R.add(R.drawable.dice100_20);
        Dice100R.add(R.drawable.dice100_21);
        Dice100R.add(R.drawable.dice100_22);
        Dice100R.add(R.drawable.dice100_23);
        Dice100R.add(R.drawable.dice100_24);
        Dice100R.add(R.drawable.dice100_25);
        Dice100R.add(R.drawable.dice100_26);
        Dice100R.add(R.drawable.dice100_27);
        Dice100R.add(R.drawable.dice100_28);
        Dice100R.add(R.drawable.dice100_29);
        Dice100R.add(R.drawable.dice100_30);
        Dice100R.add(R.drawable.dice100_31);
        Dice100R.add(R.drawable.dice100_32);
        Dice100R.add(R.drawable.dice100_33);
        Dice100R.add(R.drawable.dice100_34);
        Dice100R.add(R.drawable.dice100_35);
        Dice100R.add(R.drawable.dice100_36);
        Dice100R.add(R.drawable.dice100_37);
        Dice100R.add(R.drawable.dice100_38);
        Dice100R.add(R.drawable.dice100_39);
        Dice100R.add(R.drawable.dice100_40);
        Dice100R.add(R.drawable.dice100_41);
        Dice100R.add(R.drawable.dice100_42);
        Dice100R.add(R.drawable.dice100_43);
        Dice100R.add(R.drawable.dice100_44);
        Dice100R.add(R.drawable.dice100_45);
        Dice100R.add(R.drawable.dice100_46);
        Dice100R.add(R.drawable.dice100_47);
        Dice100R.add(R.drawable.dice100_48);
        Dice100R.add(R.drawable.dice100_49);
        Dice100R.add(R.drawable.dice100_50);
        Dice100R.add(R.drawable.dice100_51);
        Dice100R.add(R.drawable.dice100_52);
        Dice100R.add(R.drawable.dice100_53);
        Dice100R.add(R.drawable.dice100_54);
        Dice100R.add(R.drawable.dice100_55);
        Dice100R.add(R.drawable.dice100_56);
        Dice100R.add(R.drawable.dice100_57);
        Dice100R.add(R.drawable.dice100_58);
        Dice100R.add(R.drawable.dice100_59);
        Dice100R.add(R.drawable.dice100_60);
        Dice100R.add(R.drawable.dice100_61);
        Dice100R.add(R.drawable.dice100_62);
        Dice100R.add(R.drawable.dice100_63);
        Dice100R.add(R.drawable.dice100_64);
        Dice100R.add(R.drawable.dice100_65);
        Dice100R.add(R.drawable.dice100_66);
        Dice100R.add(R.drawable.dice100_67);
        Dice100R.add(R.drawable.dice100_68);
        Dice100R.add(R.drawable.dice100_69);
        Dice100R.add(R.drawable.dice100_70);
        Dice100R.add(R.drawable.dice100_71);
        Dice100R.add(R.drawable.dice100_72);
        Dice100R.add(R.drawable.dice100_73);
        Dice100R.add(R.drawable.dice100_74);
        Dice100R.add(R.drawable.dice100_75);
        Dice100R.add(R.drawable.dice100_76);
        Dice100R.add(R.drawable.dice100_77);
        Dice100R.add(R.drawable.dice100_78);
        Dice100R.add(R.drawable.dice100_79);
        Dice100R.add(R.drawable.dice100_80);
        Dice100R.add(R.drawable.dice100_81);
        Dice100R.add(R.drawable.dice100_82);
        Dice100R.add(R.drawable.dice100_83);
        Dice100R.add(R.drawable.dice100_84);
        Dice100R.add(R.drawable.dice100_85);
        Dice100R.add(R.drawable.dice100_86);
        Dice100R.add(R.drawable.dice100_87);
        Dice100R.add(R.drawable.dice100_88);
        Dice100R.add(R.drawable.dice100_89);
        Dice100R.add(R.drawable.dice100_90);
        Dice100R.add(R.drawable.dice100_91);
        Dice100R.add(R.drawable.dice100_92);
        Dice100R.add(R.drawable.dice100_93);
        Dice100R.add(R.drawable.dice100_94);
        Dice100R.add(R.drawable.dice100_95);
        Dice100R.add(R.drawable.dice100_96);
        Dice100R.add(R.drawable.dice100_97);
        Dice100R.add(R.drawable.dice100_98);
        Dice100R.add(R.drawable.dice100_99);
        Dice100R.add(R.drawable.dice100_100);
        diceicon = BitmapFactory.decodeResource(this.getResources(), R.drawable.dice100_100);
        for (int i = 0; i<Dice100R.size(); i++){
            diceface = BitmapFactory.decodeResource(this.getResources(), Dice100R.get(i));
            Dice100.add(diceface);
        }
        DicesList.add(new DiceClass(diceicon, Dice100));
    }
}
java android bitmap
1个回答
0
投票

R.drawable 效果更好,因为它从替代资源文件夹限定符(l、m、h、x、xx、xxx)加载,而从相机拍摄或从存储上传的位图可能会更大,使您在运行时遇到两个问题:

或者您的布局将缓慢移动,因为在小视图上绘制大位图,或者您在 OutOfMemoryException 上运行,这两个问题都可以通过对位图进行下采样来解决,如下所示:https://developer.android.com/主题/性能/图形/加载位图

© www.soinside.com 2019 - 2024. All rights reserved.