【问题标题】:XML drawable Bitmap tileMode bug?XML 可绘制位图 tileMode 错误?
【发布时间】:2011-09-28 16:09:17
【问题描述】:

我的可绘制资源使用 tileMode 重复时遇到问题。在某些情况下,图像只是被拉伸,有时会被适当地重复。

以下是我用来创建按钮状态的 xml 文件:

用于重复平铺的图像可绘制

^^^^^^^^^^^^^

btn_menu_item.xml

<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize="true" android:visible="true" android:variablePadding="true">
    <!-- selected -->
    <item 
        android:state_selected="true" 
        android:drawable="@drawable/menu_item_selected"/>

    <!-- focused -->
    <item 
        android:state_focused="true" 
        android:drawable="@drawable/menu_item_pressed"/>

    <!-- pressed -->
    <item 
        android:state_pressed="true" 
        android:drawable="@drawable/menu_item_pressed"/>

    <!-- normal -->
    <item 
        android:state_pressed="false" 
        android:state_focused="false" 
        android:drawable="@drawable/menu_item_normal"/>

</selector>

menu_item_normal.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <gradient 
                android:startColor="#757575" 
                android:endColor="#929292" 
                android:angle="90"/>
        </shape>    
    </item>

    <item>
        <bitmap 
            android:src="@drawable/menu_lines_texture"  
            android:tileMode="repeat"
            android:dither="true"/>
    </item>
</layer-list>

menu_item_pressed.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <gradient 
                android:startColor="#dd4e00" 
                android:endColor="#c64600" 
                android:angle="90"/>
        </shape>
    </item>

    <item>
        <bitmap 
            android:src="@drawable/menu_lines_texture"  
            android:tileMode="repeat"
            android:dither="true"/>
    </item>
</layer-list>

请看下面的图片,了解我在说什么。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    这是一个已知错误,在 Android 3.0 中部分修复,在 ICS 中完全修复。

    【讨论】:

    • 感谢您对此的回复!有解决办法吗?
    • 我仍然在 Xoom 的 3.2 中发现这个问题。在代码中设置它可以修复它。
    • 就像我说的,完全固定在 ICS 中 :)
    • 您能否指出问题所在,以便我们考虑非代码解决方法?还是这是乌托邦?
    • 在 statelist drawable 的情况下如何从代码中设置平铺模式?
    【解决方案2】:

    我们在 Sony 的 Google TV 设备上编写 3.2 时遇到了类似的问题。我们注意到在位图上使用android:tileMode="repeat" 作为背景图像产生了一些非常相似的背景条纹。

    在这种情况下,解决方法是在包含位图的视图上关闭硬件加速,如下所示(来自我们 Activity 中的函数):

    View tile_holder = this.findViewById(R.id.tile_holder);
    tile_holder.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    

    【讨论】:

    • 我可以保证这一点。运行 Lollipop 的旧手机仍然存在问题,以编程方式设置平铺模式不起作用,但这样做(通过包含的布局文件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多