android – LG G手表不显示全彩色深度的32位图像或渐变

我一直在努力让运行 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 Solution,Color banding and artifacts with gradients despite using RGBA_8888 everywhere,Color banding only on Android 4.0+,Awful background image quality in Android),但似乎都没有适用.

以下是我创建渐变的步骤

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位图
>使用比特深度减少的png位图(256色)
>使用100质量的jpeg.
>在创建布局之前和之后,在Activity中手动将PixelFormat设置为RGBA_8888
>打开活动中的抖动
>使用自定义位图加载器从代码加载位图(设置像素格式,抖动等,请参阅Awful background image quality in Android)
>关闭ImageView的任何缩放比例
>将图像放在drawable,drawable-hdpi和raw文件夹中
>解压缩APK并验证图像是否已解压缩.

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

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

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

解决方法

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

步骤1:

手动将像素格式设置为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,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再次提高质量.

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

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...