2016-10-12 14 views
1

私はdrawableから単純なリソースをロードしようとしています。Xmlビットマップをロードできません。

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:gravity="center" 
    android:src="@drawable/ball"/> 

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid android:color="#FF0000"/> 
</shape> 

私はこのコードを使用してロードしています:私はソースとして描画可能ビットマップを持って作成された bitmapDrawable = BitmapFactory.decodeResource(context.getResources(), R.drawable.bitmap_ballを)。

しかし、それらは常にnullを返します。ビットマップxmlが存在し、drawableもある場合、これがnullを返す理由は何ですか?

答えて

0

理由はビットマップと描画可能ファイルの違いです。

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:gravity="center" 
    android:src="@drawable/ball"/> 

コンテンツ(のみ<shape xmlns:android...でファイルし、それらに名前ball.xmlを与える描画可能なフォルダに残して)、その後this答えから方法

public static Bitmap drawableToBitmap (Drawable drawable) { 
    Bitmap bitmap = null; 

    if (drawable instanceof BitmapDrawable) { 
     BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; 
     if(bitmapDrawable.getBitmap() != null) { 
      return bitmapDrawable.getBitmap(); 
     } 
    } 

    if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) { 
     bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel 
    } else { 
     bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
    } 

    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    drawable.draw(canvas); 
    return bitmap; 
} 

を追加し、そのようにそれを呼び出すと、あなたの「ビットマップ」ファイルを削除します。 :

Bitmap bitmapDrawable = drawableToBitmap(ContextCompat.getDrawable(this, R.drawable.ball)); 
+0

私はまったく同じ答えを見ました。しかし、私はこの仕事をする必要はないと思う。私はそれをテストします。 – learner

関連する問題