gpt4 book ai didi

android - LG G watch 不显示 32 位图像或具有全色深的渐变

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:56:13 24 4
gpt4 key购买 nike

我一直在努力让渐变在运行 Android 5.0.1 的 LG G Watch 上显得平滑。

在你标记为重复之前,我已经尝试了几个帖子的每个答案(比如 Why android lose image quality when displaying a png file?Is it possible to dither a gradient drawable?android:dither="true" does not dither, what's wrong?Color Banding Android SolutionColor banding and artifacts with gradients despite using RGBA_8888 everywhereColor banding only on Android 4.0+Awful background image quality in Android ),但是似乎没有一个适用。


这是我创建渐变的步骤

1) 从最新的 Android SDK 加载示例“Wearable: Watch View Stub”项目

2) 将 rect_background.xml 可绘制对象更改为:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/rect_corner_radius"/>
<gradient android:startColor="@color/light_grey"
android:endColor="@color/white"
android:angle="90"/>
</shape>

3) 这是它在模拟器上的样子

enter image description here

4) 以下是我从设备进行屏幕截图时的样子: enter image description here

5) 但是当我亲眼看到它时,有可怕的条纹:(在现实生活中看起来更糟;图像不公正) enter image description here enter image description here

下面是实物的模拟图(128色): enter image description here

我也试过:

  • 使用 png 位图(24 位)
  • 使用具有 1 个透明像素(32 位)的 png 位图
  • 使用具有所有半透明像素(32 位)的 png 位图
  • 使用减少位深度的 png 位图(256 色)
  • 使用质量为 100 的 jpeg。

  • 在创建布局之前和之后在 Activity 中手动将 PixelFormat 设置为 RGBA_8888

  • 在 Activity 中开启抖动
  • 使用自定义位图加载器从代码加载位图(设置像素格式、抖动等,参见 Awful background image quality in Android)
  • 关闭 ImageView 的任何类型的缩放
  • 将图像放入 drawable、drawable-hdpi 和 raw 文件夹
  • 解压缩 APK 并验证图像是否已解压缩。

所有这些都以相同的方式显示。


如何让它在设备上正确显示?

还有其他人看到这个问题吗?根据this site ,LG G Watch的色深还是24位,应该是满8位每 channel 。设备上的正常图像显示正确——没有明显的 strip 。

最佳答案

我能够像这样在我的 LG G Watch 上生成平滑的 gardient:

第一步:

手动设置像素格式为RGB_565

@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
getWindow().setFormat(PixelFormat.RGB_565);
}

第 2 步:

您必须在 Wear AndroidManifest.xml 中停用硬件加速。将此属性添加到应用程序标记:

android:hardwareAccelerated="false"

第 3 步:

定义一个绘制背景的新方法:

public static Bitmap drawableToBitmap (Drawable drawable, int height, int width) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable)drawable).getBitmap();
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);

return bitmap;
}

第四步:

将其应用于您的布局:

Bitmap bpBackground = drawableToBitmap(getResources().getDrawable(R.drawable.rect_background), 280, 280);
BitmapDrawable bdBackgorund = new BitmapDrawable(getResources(), bpBackground);
myLayout.setBackground(bdBackgorund);

不幸的是,我无法让它在 WatchViewStub 内部工作,但我认为这可能已经帮助您解决了问题。

第 1 步和第 2 步是获得良好结果所必需的,第 3 步和第 4 步再次提高质量。

您可以在这里找到完整的解决方案:https://github.com/lukeisontheroad/WatchViewStubStackOverflowSolution

关于android - LG G watch 不显示 32 位图像或具有全色深的渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27706241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com