【问题标题】:Problems resizing a vector drawable programatically以编程方式调整矢量可绘制对象大小的问题
【发布时间】:2017-03-03 06:01:33
【问题描述】:

这张专辑解释了我想要做什么,以及当矢量没有调整大小时我遇到的问题:http://imgur.com/a/HM3K2

这是我尝试缩放矢量的方法,但它似乎不起作用:

 private Bitmap drawCirclePreview(int color, Shape square) {


            //An object from my 'VectorOverlay' class which resolves the resource...
            VectorOverlay circleOverlay = new VectorOverlay(color);

            //...and returns a drawable
            Drawable drawable = circleOverlay.drawCircleOverlay(this);

            Bitmap bitmap;

            //Make bitmap with same dimensions as the square (redundant, I know)
            bitmap = Bitmap.createBitmap(square.getWidth(), square.getHeight(), Bitmap.Config.ARGB_8888);

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

            return bitmap;
}

正在使用的 VectorOverlay 方法内部:

    public Drawable drawCircleOverlay(Context context){

    Drawable drawable = ContextCompat.getDrawable(context, R.drawable.circle_overlay);

    drawable = DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(drawable, color);
    return drawable;

然后我为新的 LayerDrawable 创建图层:

    private void drawSquarePreview(){
            Drawable[] layers = new Drawable[2];

            //[...] omitting code for when the square object is created and drawn
            layers[0] = new BitmapDrawable(squareBmp);
            layers[1] = new BitmapDrawable(drawCirclePreview(Color.parseColor("#4af9d8"), square));

            LayerDrawable layerDrawable = new LayerDrawable(layers);

            ivPreview.setImageDrawable(layerDrawable);
    }

然而,结果仍然如图所示。我难住了。我一直在寻找答案很长时间,但我仍然找不到解决方案。任何帮助将不胜感激。

附加信息:我正在使用支持库来处理旧 API 上的矢量可绘制对象。

【问题讨论】:

    标签: android vector resize drawable android-vectordrawable


    【解决方案1】:

    没有必要为此使用矢量。向量更慢且更混乱。您可以简单地在 XML 中创建一个圆形(可绘制)。 像这样;

    <?xml version="1.0" encoding="utf-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
        android:shape="oval"> 
        <solid android:color="#FF000000"/> 
        <size android:width="40dp"
             android:height="40dp"/> 
    </shape>
    

    请记住,大小变量是一个相对大小,但形状可以缩放到任何大小。我将颜色设置为黑色,这样您就可以将其着色为任何颜色。

    【讨论】:

    • 谢谢。我猜我可以在另一个文件中或在相同形状下添加条纹并将它们添加到我的 LayerDrawable 中的另一个图层?
    • 有些用户可能没有可以转换为形状的简单圆圈,但在这种情况下可以。
    猜你喜欢
    • 2018-03-23
    • 2018-04-07
    • 1970-01-01
    • 2022-11-28
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多