[英]How to save resources on android when loading several bitmaps from assets that are needed in various activities
很抱歉,長標題只想具體說明,所以我有一些活動,一旦開始,應該初始化資產中的所有位圖,下面的代碼可以工作,但是有更好的解決方案,請大家多多幫助。
初始化位圖的類:
public class Images {
private String[]eyes=new String[]{
"images/character/face/eyes/blue.png"
};
public LinkedList<Bitmap> eyesBM=new LinkedList<Bitmap>();
private int eyesIndex = 0;
private String[]faceandhands=new String[]{
"images/character/face/faceandhands/white.png",
"images/character/face/faceandhands/black.png"
};
public LinkedList<Bitmap> faceandhandsBM=new LinkedList<Bitmap>();
private int faceandhandsIndex = 0;
private String[]facialhair=new String[]{
"images/character/face/facialhair/black.png"
};
public LinkedList<Bitmap> facialhairBM=new LinkedList<Bitmap>();
private String[]hair=new String[]{
"images/character/face/hair/grey.png"
};
public LinkedList<Bitmap> hairBM=new LinkedList<Bitmap>();
private String[]tattoes=new String[]{
"images/character/face/tattoes/test.png"
};
public LinkedList<Bitmap> tattoesBM=new LinkedList<Bitmap>();
private String[]legs=new String[]{
"images/character/legs/brown.png"
};
private LinkedList<Bitmap> legsBM=new LinkedList<Bitmap>();
private String[]shirt=new String[]{
"images/character/shirt/purple.png"
};
public LinkedList<Bitmap> shirtBM=new LinkedList<Bitmap>();
private String[]shoes=new String[]{
"images/character/shoes/red.png"
};
public LinkedList<Bitmap> shoesBM=new LinkedList<Bitmap>();
private String[]background=new String[]{
"images/character/background/normal.png"
};
public LinkedList<Bitmap> backgroundBM=new LinkedList<Bitmap>();
public Images(Context c) {
loadBitmaps(c,eyes,"eyes");
loadBitmaps(c,faceandhands,"faceandhands");
loadBitmaps(c,facialhair,"facialhair");
loadBitmaps(c,hair,"hair");
loadBitmaps(c,tattoes,"tattoes");
loadBitmaps(c,legs,"legs");
loadBitmaps(c,shirt,"shirt");
loadBitmaps(c,shoes,"shoes");
loadBitmaps(c,background,"background");
}
public Bitmap getBitmapFromAsset(Context context, String filePath) {
AssetManager assetManager = context.getAssets();
InputStream istr;
Bitmap bitmap = null;
try {
istr = assetManager.open(filePath);
bitmap = BitmapFactory.decodeStream(istr);
} catch (IOException e) {
System.out.println("Fudeu geral !");
}
return bitmap;
}
public void loadBitmaps(Context c,String[] src,String dest){
Bitmap bit=null;
for (int i = 0;i<src.length;i++){
bit= getBitmapFromAsset(c,src[i]);
switch (dest){
case "eyes":
eyesBM.add(bit);
break;
case "faceandhands":
faceandhandsBM.add(bit);
break;
case "facialhair":
facialhairBM.add(bit);
break;
case "hair":
hairBM.add(bit);
break;
case "tattoes":
tattoesBM.add(bit);
break;
case "legs":
legsBM.add(bit);
break;
case "shirt":
shirtBM.add(bit);
break;
case "shoes":
shoesBM.add(bit);
break;
case "background":
backgroundBM.add(bit);
break;
}
//dest.add(bit);
//dest.add(BitmapFactory.decodeResource(r, src[i]));
}
}
public Bitmap getBitmap(String name){
switch (name){
case "eyes":
eyesIndex=eyesIndex>=eyesBM.size()?0:eyesIndex;
Bitmap aux =eyesBM.get(eyesIndex);
eyesIndex++;
return aux;
case "faceandhands":
faceandhandsIndex=faceandhandsIndex>=faceandhandsBM.size()?0:faceandhandsIndex;
Bitmap aux1=faceandhandsBM.get(faceandhandsIndex);
faceandhandsIndex++;
return aux1;
//return faceandhandsBM.get(0);
case "facialhair":
return facialhairBM.get(0);
case "hair":
return hairBM.get(0);
case "tattoes":
return tattoesBM.get(0);
case "legs":
return legsBM.get(0);
case "shirt":
return shirtBM.get(0);
case "shoes":
return shoesBM.get(0);
case "background":
return backgroundBM.get(0);
}
return null;
}}
´主要活動中的代碼:
setContentView(R.layout.activity_character);
final EditText eT=(EditText)findViewById(R.id.characterName);
v = (ImageView)findViewById(R.id.characterDisplay);
img = new Images(this);
LD=null;
DD= new Drawable[]{
new BitmapDrawable(img.getBitmap("legs")),
new BitmapDrawable(img.getBitmap("faceandhands")),
new BitmapDrawable(img.getBitmap("shirt")),
new BitmapDrawable(img.getBitmap("eyes")),
new BitmapDrawable(img.getBitmap("facialhair")),
new BitmapDrawable(img.getBitmap("hair")),
new BitmapDrawable(img.getBitmap("shoes")),
new BitmapDrawable(img.getBitmap("tattoes"))
};
LD=new LayerDrawable(DD);
v.setImageDrawable(LD);
((Button)findViewById(R.id.buttonSkin)).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
DD[1]=new BitmapDrawable(img.getBitmap("faceandhands"));
LD=new LayerDrawable(DD);
update(LD);
//saveCaracter(eT.getText().toString());
//loadGame(eT.getText().toString());
}
});
更新方法:
private void update(LayerDrawable ld) {
v.setImageDrawable(ld);
}
我知道的最簡單的方法是使用Picasso庫。 它減少了一噸的編碼。 http://square.github.io/picasso/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.