在运行时修改矢量资产的形状(比如从顶部切下一部分)以在 Android 中显示用户进度。那可能吗?
Modifying shape of vector asset at runtime (like cut some part from top) to display user progress in Android. Is that possible?
我想使用Android中的矢量资源显示玩家进度。我只想使用一个矢量资产文件,因为 'progress percentage' 可能会有所不同。例如,它可以非常不同,如 8%、51% 等。
当我有纯色背景时,我使用了与背景颜色相同的附加矩形层来根据进度隐藏部分 SVG,但现在我不能 - 开始使用漂亮的图像作为背景。
请查看下面的图片以了解我尝试实现的目标:
A 正在阅读此 https://medium.com/androiddevelopers/understanding-androids-vector-image-format-vectordrawable-ab09e41d5c68,在 Google 上搜索,在 Whosebug 上搜索 - 但仍然没有答案。
小伙伴们,你们有什么想法吗?
提前致谢..
/** @IntRange(from=0,to=10000)
* 0 means hidden 10000 means totally visible*/
fun clipDrawable(level: Int) {
if (drawable is ClipDrawable){
drawable.level = level
} else {
val clippedDrawable = ClipDrawable(drawable, Gravity.TOP, HORIZONTAL)
setImageDrawable(clippedDrawable)
(drawable as? ClipDrawable)?.level = level
}
}
您可以创建自定义图像视图并在其中添加此方法,或者稍微修改一下并将其添加到您的 fragment/activity
中
感谢 Bacho Kurtanidze 的建议,我已经解决了我的问题。我将在这里为未来的访客解释我所做的事情:
1.仔细阅读ClipDrawable官方文档:https://developer.android.com/reference/android/graphics/drawable/ClipDrawable
和本教程:
https://programmer.group/how-to-use-clipdrawable-to-realize-imageview-picture-switching-animation.html
实现 ClipDrawable 所需的一切都有,尽管文本不是 100% 清晰。
2. 将我的矢量资产放入单独的 'clip_brain_fill.xml' 中,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<clip
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="bottom"
android:clipOrientation="vertical"
android:drawable="@drawable/brain_fill"/>
3. 将新的 'clip drawable' 分配给持有 'brin_fill.xml 的 ImageView;之前的资产:
...
<ImageView
android:id="@+id/brain_fill_iv"
android:layout_width="@dimen/brain_width"
android:layout_height="@dimen/brain_height"
app:srcCompat="@drawable/clip_brain_fill" />
...
4. 现在可以从 java 代码中设置裁剪级别,如下所示:
ImageView brainFillIV = findViewById(R.id.brain_fill_iv);
ClipDrawable clipBrainFill = (ClipDrawable) brainFillIV.getDrawable();
clipBrainFill.setLevel((int) (percents * 100));
我想使用Android中的矢量资源显示玩家进度。我只想使用一个矢量资产文件,因为 'progress percentage' 可能会有所不同。例如,它可以非常不同,如 8%、51% 等。
当我有纯色背景时,我使用了与背景颜色相同的附加矩形层来根据进度隐藏部分 SVG,但现在我不能 - 开始使用漂亮的图像作为背景。
请查看下面的图片以了解我尝试实现的目标:
A 正在阅读此 https://medium.com/androiddevelopers/understanding-androids-vector-image-format-vectordrawable-ab09e41d5c68,在 Google 上搜索,在 Whosebug 上搜索 - 但仍然没有答案。
小伙伴们,你们有什么想法吗? 提前致谢..
/** @IntRange(from=0,to=10000)
* 0 means hidden 10000 means totally visible*/
fun clipDrawable(level: Int) {
if (drawable is ClipDrawable){
drawable.level = level
} else {
val clippedDrawable = ClipDrawable(drawable, Gravity.TOP, HORIZONTAL)
setImageDrawable(clippedDrawable)
(drawable as? ClipDrawable)?.level = level
}
}
您可以创建自定义图像视图并在其中添加此方法,或者稍微修改一下并将其添加到您的 fragment/activity
中感谢 Bacho Kurtanidze 的建议,我已经解决了我的问题。我将在这里为未来的访客解释我所做的事情:
1.仔细阅读ClipDrawable官方文档:https://developer.android.com/reference/android/graphics/drawable/ClipDrawable
和本教程: https://programmer.group/how-to-use-clipdrawable-to-realize-imageview-picture-switching-animation.html 实现 ClipDrawable 所需的一切都有,尽管文本不是 100% 清晰。
2. 将我的矢量资产放入单独的 'clip_brain_fill.xml' 中,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<clip
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="bottom"
android:clipOrientation="vertical"
android:drawable="@drawable/brain_fill"/>
3. 将新的 'clip drawable' 分配给持有 'brin_fill.xml 的 ImageView;之前的资产:
...
<ImageView
android:id="@+id/brain_fill_iv"
android:layout_width="@dimen/brain_width"
android:layout_height="@dimen/brain_height"
app:srcCompat="@drawable/clip_brain_fill" />
...
4. 现在可以从 java 代码中设置裁剪级别,如下所示:
ImageView brainFillIV = findViewById(R.id.brain_fill_iv);
ClipDrawable clipBrainFill = (ClipDrawable) brainFillIV.getDrawable();
clipBrainFill.setLevel((int) (percents * 100));