android - 在 Canvas 上绘图时的 XML 可绘制比例

标签 android canvas drawable android-drawable xml-drawable

我正在尝试制作一个看起来像带有阴影的圆圈的可绘制对象。它需要缩放到不同的尺寸并且需要在 Canvas 上绘制。我使用 setBounds 来设置坐标和比例。

我的绘图:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="0dp"
        android:left="5dp"
        android:right="5dp"
        android:top="10dp">
        <shape android:shape="oval">
            <size
                android:width="115dp"
                android:height="115dp" />
            <solid android:color="@color/level_button_dark" />
        </shape>
    </item>
    <item
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp">
        <shape android:shape="oval">
            <size
                android:width="115dp"
                android:height="115dp" />
            <solid android:color="@color/level_button" />
        </shape>
    </item>
</layer-list>

我的绘图代码

mButtonDrawable.setBounds(20, 20, 220, 220);
mButtonDrawable.draw(canvas);
mButtonDrawable.setBounds(270, 20, 370, 120);
mButtonDrawable.draw(canvas);
mButtonDrawable.setBounds(420, 20, 470, 70);
mButtonDrawable.draw(canvas);

结果:

enter image description here

我希望所有比例都能获得一致的外观。 在模拟器 API 18 上测试。

最佳答案

虽然 @RexSplode 方法是有效的,但我找到了一种用一个可绘制对象来实现的方法。您只是不应该调用 setBounds() 并使用 Canvas 进行操作。

请参阅下面的示例。

mButtonDrawable.setBounds(0, 0, mButtonDrawable.getIntrinsicWidth(), mButtonDrawable.getIntrinsicHeight());

canvas.save();
canvas.translate(20, 20);
canvas.scale(1, 1);
mButtonDrawable.draw(canvas);
canvas.restore();

canvas.save();
canvas.translate(420, 20);
canvas.scale(0.5f, 0.5f);
mButtonDrawable.draw(canvas);
canvas.restore();

canvas.save();
canvas.translate(620, 20);
canvas.scale(0.25f, 0.25f);
mButtonDrawable.draw(canvas);
canvas.restore();

结果:

enter image description here

我从 ImageView source 得到了一个想法.

关于android - 在 Canvas 上绘图时的 XML 可绘制比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34153855/

相关文章:

java - 我应该删除Android应用程序内存中的文件吗?

Android Page Curl 动画

android - 将可绘制对象转换为字符串以传递给另一个 Activity

android - 如何保护 Android 应用程序中的可绘制资源

具有自定义工作目录的 Android Studio 终端

android - 想删除屏幕顶部的 TextView

Android MapView ItemizedOverlay Draw onTap

android - 如何在空 Canvas 上画圆?

delphi - 在鼠标位置的组件上绘图时闪烁

android - 如何使用 builder.addaction(icon ,"string",pendingIntent) 在 android 中使用通知方法添加图像?