2017-10-02 16 views
-1

Je développe une vue personnalisée pour android. Pour cela, je veux donner une capacité d'utilisateur de sélectionner et de l'image en utilisant tout comme lors de l'utilisation ImageViewComment créer un formulaire Bitmap Objet dessinable

Dans attr.xml J'ai ajouté du code ci-dessous.

<declare-styleable name="DiagonalCut"> 
    <attr name="altitude" format="dimension"/> 
    <attr name="background_image" format="reference"/> 
</declare-styleable> 

En vue personnalisée je reçois cette valeur en tant que Drawable qui a été fourni en XML comme app:background_image="@drawable/image"

TypedArray typedArray = getContext().obtainStyledAttributes(arr, R.styleable.DiagonalCut); 
altitude = typedArray.getDimensionPixelSize(R.styleable.DiagonalCut_altitude,10); 
sourceImage = typedArray.getDrawable(R.styleable.DiagonalCut_background_image); 

Je veux créer un Bitmap en utilisant ce sourceImage qui est un objet Drawable.

Si la façon dont je vais mal, s'il vous plaît fournir une alternative.

+0

quoi de mal avec 'Drawable'? qu'est-ce que vous avez besoin de 'Bitmap' pour? et si vous avez vraiment besoin de 'Bitmap', alors utilisez la méthode' BitmapFactory # decodeResource' – pskink

Répondre

0

Vous pouvez convertir votre Drawable-Bitmap comme celui-ci (pour la ressource):

Bitmap icon = BitmapFactory.decodeResource(context.getResources(), 
             R.drawable.drawable_source); 

OU

Si vous avez ce stocké dans une variable, vous pouvez utiliser ceci:

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; 
} 

More details