드로어 블 폴더 대신에 assets 폴더를 사용하고 싶습니다 (9 패치가 아닌 경우). 여기에 여러 폴더를 사용할 수 있기 때문에 사용하고 싶습니다. 그러나 drawable을 얻기 위해 내가 사용하는 방법은 CPU가 많은 것을 조용하게 할 것을 요구했습니다. 예를 들어, 10 개의 ImageView를 추가 한 후 10 % CPU가 필요합니다 (Android Assistant 및 Samsung TouchWiz TaskManager 사용). 내가 게임을 쓰는 동안 나는 그것을 알아 채지 못했다. 그리고 전경에 있지 않더라도이 게임은 40-100 %의 CPU를 필요로합니다. 내가 만드는 데 사용하는 방법입니다자산 폴더에서 드로어 블을 드로잉하는 사용자 정의 방법은 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의 일부 ImageViews을 추가하고 응용 프로그램에서 할 수있는 유일한 방법 : 아마 최고의
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);
}
CPU 사용량이 그만큼 높았던 이유는이 방법으로 인해 발생하지 않았습니다. 하지만 당신이 언급 한 traceview 덕분에 나는 진짜 이유를 매우 빨리 발견했고이 방법의 최적화는 훌륭하게 작동합니다. 문제는 실수로 자주 호출되는 실행 파일 때문입니다. 고마워요! – Xazen