Android:使用.setShader()损坏TextView

我正在尝试使用以下代码在某些
Android文本视图上创建旧式8位效果:

 private static Shader InversetextShader = new LinearGradient(0, 0, 0, 22,
                                          new int[] { Color.RED, Color.BLUE },
                                          new float[] { 0, 1 }, TileMode.CLAMP);

 TextView t1 = (TextView) findViewById(R.id.textView2);
    t1.setText(getApplicationContext().getString(R.string.app_name_mele));
    t1.getPaint().setShader(InversetextShader);
    t1.setTypeface(font);
    t1.setShadowLayer(4f, 2.0f, 2.0f, Color.BLACK);

该代码适用于Android< 3,但是当我开始瞄准ICS(API Level 14)时,却给了我一些问题. TextView非常简单:

    <TextView
        android:id="@+id/textViewRecords1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:gravity="center_horizontal"
        android:textAppearance="?android:attr/textAppearanceLarge" >
    </TextView>

这是一个显示缺陷的图像,一些不应该存在的黑线:

(对不起,我无法发布图片)

http://i.stack.imgur.com/xRWOM.png

如果我关闭显示屏(即锁定手机)然后再打开,则缺陷消失.我尝试再次调用.invalidate()并绘制视图,但没有成功.

最佳答案 听起来像是UI工具包OpenGL渲染器中的一个错误.在什么版本的ICS上发生了这种情况?你有一个我可以用来重现问题的APK,如果它仍然存在可能会修复它吗?作为一种解决方法,您可以使用

yourLayout.setLayerType(View.LAYER_TYPE_SOFTWARE,yourLayout.getPaint); 

在TextViews上强制进行软件渲染.

点赞