代码之家  ›  专栏  ›  技术社区  ›  Chathuranga Shan Jayarathna

如何创建位图形式的可绘制对象

  •  3
  • Chathuranga Shan Jayarathna  · 技术社区  · 7 年前

    我正在为android开发自定义视图。为此,我想让用户能够像使用时一样选择和使用图像 ImageView

    在里面 属性。xml

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

    在自定义视图中,我将此值作为 Drawable 它以xml形式提供为 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);
    

    sourceImage 这是一个可绘制的对象。

    如果我做错了,请提供一个替代方案。

    1 回复  |  直到 7 年前
        1
  •  17
  •   Ashish Ranjan    7 年前

    您可以转换您的 Drawable Bitmap 这样(对于资源):

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

    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