Android LG G手表不显示32位图像或全色深度渐变

Android LG G手表不显示32位图像或全色深度渐变,android,wear-os,bit-depth,Android,Wear Os,Bit Depth,在运行安卓5.0.1的LG G手表上,我一直在努力让渐变看起来平滑 在您标记为副本之前,我已经尝试了好几篇文章的每个答案(如,,,),但似乎都不适用 下面是我创建渐变的步骤 1) 从最新的Android SDK加载示例“Wearable:Watch View Stub”项目 2) 将rect_background.xmldrawable更改为: <shape xmlns:android="http://schemas.android.com/apk/res/android" an

在运行安卓5.0.1的LG G手表上,我一直在努力让渐变看起来平滑

在您标记为副本之前,我已经尝试了好几篇文章的每个答案(如,,,),但似乎都不适用


下面是我创建渐变的步骤 1) 从最新的Android SDK加载示例“Wearable:Watch View Stub”项目

2) 将
rect_background.xml
drawable更改为:

<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) 下面是它在模拟器上的外观

4) 下面是我在设备上进行屏幕捕获时的样子:

5) 但当我亲眼看到它时,却发现了可怕的条纹:(它在现实生活中看起来糟糕得多;图像没有做到公正)

下面是一张模拟的照片,它看起来像是一个人(128种颜色):

我也尝试过:

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

  • 在创建布局之前和之后的“活动”中将PixelFormat手动设置为RGBA_8888

  • 在活动中启用抖动
  • 使用自定义位图加载程序从代码加载位图(设置像素格式、抖动等,请参阅)
  • 关闭ImageView的任何类型的缩放
  • 将图像放入可绘制、可绘制hdpi和原始文件夹
  • 解压缩APK并验证图像是否已解压缩
所有这些都以同样的方式出现


如何使其正确显示在设备上?
还有其他人看到这个问题吗?据介绍,LG G手表有一个颜色深度或24位,每个通道应为8位。设备上的正常图像显示正确——没有明显的条纹。

我能够在我的LG G手表上生成一个平滑的图案,如下所示:

步骤1:

手动将像素格式设置为RGB_565

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

您必须停用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;
}
步骤4:

将其应用于布局:

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步再次提高质量。


您可以在这里找到完整的解决方案:

我也可以在我的LG G手表上重现这个问题,但它在Moto 360上运行良好。看起来其他开发人员也发现了同样的问题。您是否尝试将其设置为可绘制到ImageView的src(而不是背景),并使用矩阵?它可能会提供更多的洞察力…@TacB0sS,是的,我尝试使用ImageView src并将转换设置为矩阵。onAttachedToWindow在哪个视图中?有背景的那一个?我删除了完整的WatchFaceStub,并将其直接应用到我的主活动中的顶部框架布局。xml你也可以上传你使用的图像吗?我没有使用图像,我使用了你在问题中描述的可绘制图像(R.drawable.rect_background),我也在手表上测试了它,但必须设置PixelFormat.RGB_565才能使其正常工作。设置像素格式对你有用吗?