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

Jas*_*son 8 android bit-depth wear-os

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

在你标记为重复之前,我已经尝试了几个帖子的每个答案(比如为什么android在显示png文件时会丢失图像质量?,是否可以抖动渐变可绘制?,android:dither ="true"不会抖动,有什么不对?,彩色条带Android解决方案,色带,并与梯度文物尽管使用RGBA_8888无处不在,颜色只能在Android 4.0以上版本的条带,在Android的可怕的背景图像质量),但似乎都不适用.


以下是我创建渐变的步骤

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

2)将rect_background.xmldrawable 更改为:

<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>
Run Code Online (Sandbox Code Playgroud)

3)这是仿真器上的样子

在此输入图像描述

4)这是我从设备进行屏幕捕获时的样子: 在此输入图像描述

5)但是当我亲眼看到它时,有一种可怕的条纹:(在现实生活中看起来更糟糕;图像不公正) 在此输入图像描述 在此输入图像描述

以下是亲眼看到的模拟图像(128种颜色): 在此输入图像描述

我也尝试过:

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

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

  • 打开活动中的抖动
  • 使用自定义位图加载器从代码加载位图(设置像素格式,抖动等,请参阅Android中的可怕背景图像质量)
  • 关闭ImageView的任何缩放
  • 将图像放在drawable,drawable-hdpi和raw文件夹中
  • 解压缩APK并验证图像是否已解压缩.

所有这些都以同样的方式出现.


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

还有其他人看到这个问题吗?根据这个网站,LG G Watch的颜色深度为24位,每通道应为8位.设备上的正常图像显示正确 - 没有明显的条带.

Luk*_*kas 4

我能够在 LG G Watch 上生成平滑的花园,如下所示:

步骤1:

手动将像素格式设置为RGB_565

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    getWindow().setFormat(PixelFormat.RGB_565);
}
Run Code Online (Sandbox Code Playgroud)

第2步:

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

android:hardwareAccelerated="false"
Run Code Online (Sandbox Code Playgroud)

步骤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;
}
Run Code Online (Sandbox Code Playgroud)

步骤4:

将其应用到您的布局中:

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

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

要获得不错的结果,步骤 1 和 2 是必要的,步骤 3 和 4 再次提高质量。

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


归档时间:

查看次数:

686 次

最近记录:

9 年,7 月 前