相关疑难解决方法(0)

尽管在任何地方都使用RGBA_8888,但颜色条带和渐变的人工制品

我知道色带是一个问题的老栗子,之前已经讨论了很多次提供了各种解决方案(基本上归结为使用32位,或使用抖动).事实上不久前我问过并随后回答了我自己的问题.当时,我还以为我把在回答这个问题的解决方案(这是应用setFormat(PixelFormat.RGBA_8888)的Window,也给Holder在的情况下SurfaceView),在我的很好的应用已经解决了这个问题.至少解决方案使得渐变在我当时开发的设备上看起来非常好(很可能是Android 2.2).

我现在正在使用HTC One X(Android 4.0)和华硕Nexus 7(Android 4.1)进行开发.我试图做的是在a的整个区域应用灰色渐变SurfaceView.即使我认为确保包含Window和Holder配置为32位颜色,我得到可怕的绑定工件.事实上,在Nexus 7上,我甚至看到了文物的移动.这不仅发生在SurfaceView当然连续绘制的情况下,而且还发生在View我正常添加的法线中,以便为测试目的绘制完全相同的梯度,这将绘制一次.这些工件的存在方式当然看起来非常糟糕,实际上就像观看信号较差的模拟电视一样.无论是View和SurfaceView展览完全相同的器物,它们一起四处走动.

我的目的是在整个过程中使用32位,而不是使用抖动.我的印象Window是默认情况下在Android 4.0之前默认为32位.通过应用RGBA_8888在SurfaceView我本来期望一切都已经32位全境,从而避免任何文物.

我注意到在SO上还有其他一些问题,人们观察到RGBA_88884.0/4.1平台上似乎不再有效.

这是我的Nexus 7的截图,View顶部和SurfaceView下面都有法线,两者都使用相同的渐变Canvas.当然,它不会像在显示屏上那样显示工件,因此显示此屏幕抓取可能毫无意义.我想强调的是,在Nexus的屏幕上,条带确实看起来很糟糕.编辑:其实,真正的截图没有显示的文物在所有.我在Nexus 7上看到的文物并不是统一的条带; 它看起来很随意.

在此输入图像描述

Activity用于创建以上内容的测试:

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Shader;
import android.os.Bundle; …
Run Code Online (Sandbox Code Playgroud)

android colors surfaceview bit-depth

26
推荐指数
1
解决办法
6809
查看次数

Android中糟糕的背景图像质量

我正在尝试在我的活动中放置背景,但图像质量不是预期的.

图像在蓝色条纹上方有一个简单的渐变,目前看起来像这样:

LinearLayout背景

我的活动布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@drawable/background_register"
    android:drawingCacheQuality="high" >
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

后台描述符(drawable/background_register):

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:filter="true"
    android:tileMode="repeat"
    android:gravity="center"
    android:src="@drawable/background_blue_565" />
Run Code Online (Sandbox Code Playgroud)

目前我有一个描述BitmapDrawable的XML文件,它是actitivy的LinearLayout背景.但我已经尝试了迄今为止我发现的一切.启用抖动,抗锯齿,平铺,RGBA_8888模式...您可以命名.有没有人有我可以尝试的不同解决方案或想法?我会非常感激的.

顺便说一句,我目前正在用Galaxy S II开发应用程序.

android gradient background image

16
推荐指数
2
解决办法
1万
查看次数

仅适用于Android 4.0及以上的色带

在运行Android 4.0或4.0.3的模拟器上,我看到了可怕的色带,我似乎无法摆脱它.在我测试的每个其他Android版本上,渐变看起来很流畅.

我有一个配置为RGBX_8888的SurfaceView,并且渲染画布中不存在条带.如果我通过在渲染结束时叠加噪声模式来手动抖动图像,我可以使渐变再次平滑,但显然代价是我宁愿避免的性能.

因此绑带将在稍后介绍.我只能假设,在4.0+上,我的SurfaceView在被绘制和显示之间的某个点处被量化为较低的位深度,我可以从屏幕截图中看到渐变是一次步进8个值每个通道,建议量化到555(而不是565).

我将以下内容添加到我的Activity onCreate函数中,但它没有任何区别.

getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
Run Code Online (Sandbox Code Playgroud)

我也尝试将上面的内容放在onAttachedToWindow()上,但仍然没有变化.

(我相信RGBA_8888无论如何都是2.2及以上版本的默认窗口格式,因此明确设置该格式对4.0+没有影响也就不足为奇了.)

这就留下了一个问题,如果源是8888,目的地是8888,那么引入量化/条带的原因是什么,它为什么只出现在4.0+?

非常令人费解.我想知道是否有人可以放弃一些光线?

android gradient dithering quantization surfaceview

13
推荐指数
1
解决办法
2795
查看次数

渐变兼容性问题 - ICS默认的颜色比以前的所有Android版本都少

2.3.3左,右边的ICS(仿真器). 注意红框内的渐变淡化效果差异.

姜饼(2.3.3)模拟器左,ICS(4.0.3)模拟器右.注意红色框内的渐变淡化效果差异(在单独的窗口中打开以查看完整大小的图像).

主视图背景:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/app_bg"
android:orientation="vertical" >

...

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

app_bg.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient android:startColor="#000" android:centerColor="#333"
    android:endColor="#000" android:angle="270" />
</shape>
Run Code Online (Sandbox Code Playgroud)

是什么导致了这个问题?如何解决这个问题,以便ICS渐变看起来像2.3.3版本一样平滑?问题是否仅在模拟器上发生?

android android-4.0-ice-cream-sandwich

7
推荐指数
1
解决办法
1891
查看次数