android - 带有重力=“fill_horizontal”的Android位图tileModeY=“repeat”创建丑陋的边缘
问题描述
我想为调整到手机宽度的整个应用程序创建垂直重复的背景。
我的位图是:
资源/drawable/repeating_bitmap.xml
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/app_bg_003_phone"
android:gravity="fill_horizontal"
android:tileModeY="repeat" />
我的风格是:
资源/值/style.xml
<style name="AppTheme" parent="BaseTheme">
<item name="android:windowBackground">@drawable/repeating_bitmap</item>
</style>
我的问题在这里:
如您所见,奇怪的是,只有边缘被拉伸,而不是整个图像。
我怎样才能实现水平拉伸和垂直重复的背景?我在位图上使用了正确的标志...(android:gravity="fill_horizontal" android:tileModeY="repeat")
如果这可以帮助我附加我重复的原始图像(mdpi)
我想使用重复位图来节省内存。这也是目前我可用的唯一 jpeg 模式。
更新
现在我知道为什么只有边缘被拉伸:来自文档: https ://developer.android.com/reference/android/graphics/drawable/BitmapDrawable
“启用平铺模式时忽略重力。默认值为“禁用”。”
这意味着当我得到 tileModeY="repeat" 时,默认情况下为 tileModeX,因为我整体启用了 tile 模式,必须是 tileModeX="clamp",即:
“clamp 复制边缘颜色。”
有什么想法可以同时使用 tileMode 和重力吗?我试图将此位图插入到重力为“fill_horizontal”的另一个视图中。可惜没有成功。
解决方案
我找到了一种非常奇特的方法来实现这一点:
- 从“位图”中删除 tileMode 属性
- 在 XML 中创建一个“layer-list”根标签
- 在带有顶部和高度属性的“位图”周围添加一个“项目”标签(将高度设置为图像的高度)
- 复制和粘贴这个“项目”,你认为你需要它来填充显示器的次数
- 为每个“项目”标签输入正确的最大值
这是一个背景图像为 116 像素高的示例。因此,以下每个标签都有一个按此高度增加的最高值。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="0dp" android:height="116dp">
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="fill_horizontal" android:src="@drawable/background" />
</item>
<item android:top="116dp" android:height="116dp">
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="fill_horizontal" android:src="@drawable/background" />
</item>
<item android:top="232dp" android:height="116dp">
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="fill_horizontal" android:src="@drawable/background" />
</item>
<item android:top="348dp" android:height="116dp">
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="fill_horizontal" android:src="@drawable/background" />
</item>
<item android:top="464dp" android:height="116dp">
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="fill_horizontal" android:src="@drawable/background" />
</item>
<item android:top="580dp" android:height="116dp">
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="fill_horizontal" android:src="@drawable/background" />
</item>
</layer-list>
推荐阅读
- r - 按组选择每个连续运行的第一行
- python - 如何使用python增加excel中的列
- javascript - 为什么在对象文字上有尾随值会返回该值?
- macos - 当前集成终端中vscode中的“在集成终端中打开”,而不是新的
- r - R中没有名为tidytext的包
- python - Plotly 安装 - RuntimeError: JupyterLab 构建失败
- javascript - Django中使用AJAX的依赖表单
- cryptography - 强大的 mac 应该允许对手生成有效的标签?
- css - 我可以在 PostCss 样式中使用反应组件属性吗
- python - json 到 dict,基于嵌套列创建多行?