そこでは複数のフォルダーを使用できるため、drawable フォルダーの代わりに assets フォルダーを使用するのが好きです (9 パッチでない場合)。ただし、ドローアブルを取得するために使用する方法では、CPU がかなり静かにする必要がありました。例: 10 個の ImageView を追加すると、10% の CPU が必要になります (私は Android Assistent と Samsung TouchWiz TaskManager を使用しています)。ゲームを書いている間は気がつきませんでした。そして今、このゲームはフォアグラウンドでなくても 40 ~ 100% の CPU を必要とします。
これが、ドローアブルを作成するために使用する方法です。
public BitmapDrawable readAsset(path){
try{
inputStream = assetManager.open(path);
//get the Bitmap
desiredImg = BitmapFactory.decodeStream(inputStream, null, opts);
//resize for other screen sizes (scale is calculated beforehand)
scaleX =(int)(desiredImg.getWidth()/scale);
scaleY = (int)(desiredImg.getHeight()/scale);
//Bitmap to get config ARGB_8888 (createScaledBitmap returns RGB_565 => bad quality especially in gradients)
//create empty bitmap with Config.ARGB_8888 with the needed size for drawable
Bitmap temp = Bitmap.createBitmap(scaleX, scaleY, Config.ARGB_8888);
//Canvas to draw desiredImg on temp
Canvas canvas = new Canvas(temp);
canvas.drawBitmap(convert, null, new Rect(0, 0, scaleX, scaleY), paint);
//Convert to BitmapDrawable
BitmapDrawable bitmapDrawable=new BitmapDrawable(temp);
bitmapDrawable.setTargetDensity(metrics);
inputStream.close();
return bitmapDrawable;
}catch (Exception e) {
Log.d(TAG, "InputStream failed: "+e.getMessage());
}
return null;
}
アプリで行う唯一のことは、このメソッドを使用して RelativeLayout にいくつかの ImageView を追加することです。
private void addImageToContainer(int paddingLeft, int paddingTop) {
ImageView imageView = new ImageView(this);
imageView.setImageDrawable(assetReader.readAsset("test.jpg"));
imageView.setPadding(paddingLeft, paddingTop, 0, 0);
container.addView(imageView);
}