我遇到了以下问题.当任何位图从资源由冰淇淋三明治运行的应用程序加载时,它可能会被不正确地,如果它已经被解码的格式,这不同于当前窗口的格式,在没有施加抖动呈现.但是,解码格式和窗口格式都已明确设置:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGBA_8888;
和
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
以下是从使用ICS 4.0.3的仿真器上运行的本文中获取的测试应用程序的屏幕截图(它在HTC HD2上提供相同的结果):
RGBA_8888(32位)窗口格式,各种位图解码格式:

RGB_565(16位)窗口格式,各种位图解码格式:

有几点可以注意到:
RGB_565;RGB_565 窗口格式和RGBA_8888 位图解码格式出现唯一好看的渐变.在这些问题中也报告了这个问题,但仍然没有找到解决方案:
渐变兼容性问题 - ICS默认的颜色比以前的所有Android版本都少
该quistion是,如何处理所有这些格式在ICS,更准确地说,如何使ICS负载与位图RGBA_8888格式,以及如何设置窗口格式RGBA_8888,以便这些位图显示正确?
在我运行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>
3)这是仿真器上的样子

4)这是我从设备进行屏幕捕获时的样子:

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

以下是亲眼看到的模拟图像(128种颜色):

我也尝试过:
使用100质量的jpeg.
在创建布局之前和之后,在Activity中手动将PixelFormat设置为RGBA_8888
所有这些都以同样的方式出现.
还有其他人看到这个问题吗?根据这个网站,LG G Watch的颜色深度为24位,每通道应为8位.设备上的正常图像显示正确 - 没有明显的条带.
我的问题是,在a中绘制一个简单的测试图像(带有渐变填充的矩形)时SurfaceView,渐变具有颜色条带.当在简单的扩展中绘制具有相同渐变的完全相同的矩形时View,渐变看起来非常平滑,并且与我期望的32位颜色一样好.
这是在相同的布局内使用与测试SurfaceView一起放置的测试并排发生的.ViewActivity
有关信息,在Activity课程中我window.setFormat(PixelFormat.RGBA_8888)打算将Activity切换为32位颜色,因为这是过去消除渐变中的条带的解决方案(但是,我相信在某个Android级别不再需要这个) 32位是默认值).我minSdkVersion8岁.
出现在onDraw()简单扩展View和以下的测试代码SurfaceView是:
    Paint paint = new Paint();
    paint.setStyle(Paint.Style.FILL);
    paint.setAntiAlias(false);
    paint.setFilterBitmap(false);
    paint.setDither(false); 
    Shader shader = new LinearGradient(
            0,
            0,
            0,
            200,
            new int[]{0xff150d2f,0xff432b96},
            null,
            Shader.TileMode.CLAMP
            );
    paint.setShader(shader);    
    canvas.drawRect(0,0,getWidth(),getHeight(), paint);
以下是显示SurfaceView上述和正常情况View下的屏幕截图.我意识到这个例子中的条带非常微妙; 当渐变扫过较小的颜色带时,它会更加明显.

有什么建议吗?
崔佛
android ×3
android-4.0-ice-cream-sandwich ×1
bit-depth ×1
drawable ×1
surfaceview ×1
wear-os ×1