GridView选择器重叠

时间:2013-06-20 15:18:31

标签: android

我正在尝试实施类似Google音乐应用的卡片样式GridView

为此,我创建了以下选择器:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:state_pressed="true" 
        android:drawable="@drawable/card_grid_bg_pressed">
    </item>
    <item 
        android:state_pressed="false" 
        android:drawable="@drawable/card_grid_bg_normal">
    </item>
</selector>

第一个drawable是card_grid_bg_pressed,第二个是card_grid_bg_hover

它正在发挥作用,但问题在于我无法实现我想要的行为;因为当您按下Google音乐GridView项目时,按下的选择器将与正常项目重叠。

以下是我想要的截图:

enter image description here

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

要做这样的事情,我使用了一个简单的drawable,并在我的视图中使用了setForeground方法。 我使用的drawable是ActionBarSherlock库的一部分(我会让你找到它abs _list_focused_holo.9.png)。

因此,在我的自定义适配器中,我有一个名为setItemChecked(int position,int boolean,View v)的方法,该方法使用setForeground来更改视图v的ForeGround。

请注意,该视图是一个FrameLayout,因为据我所知这些或只有这种方法的视图。

public void setItemChecked(int position, boolean checked, View v) {
        if(checked) {
            if(v!=null)
                ((FrameLayout) v).setForeground(mContext.getResources().getDrawable(R.drawable.abs__list_focused_holo));
            else
                Log.w(LOGCAT_TAG, "v is null. Can't change foreground");
        }
        else {
            if(v!=null)
                ((FrameLayout) v).setForeground(mContext.getResources().getDrawable(R.color.transparent));
            else
                Log.w(LOGCAT_TAG, "v is null. Can't change foreground");
        }
}