StaggeredGridView更改长按颜色

时间:2013-11-12 13:34:43

标签: android android-layout gridview android-xml android-adapter

我想在按下时更改StaggeredGridView项目的背景颜色,但是目前我默认获得一个丑陋的姜饼橙色,如图所示 here。我尝试将gridview项目背景设置为选择器,但是当我这样做时,如果我单击一个项目,则所有项目都是'背景颜色改变了。

<!-- My selector -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/holo_blue_light"
      android:state_pressed="true" />    
<item android:drawable="@android:color/transparent" />
</selector>

这是在我的StaggeredGridView中,但它没有帮助:

 <!-- In StaggeredGridView -->
 android:listSelector="@drawable/selector"

顺便说一句,我正在使用this StaggeredGridView库。提前谢谢!

3 个答案:

答案 0 :(得分:3)

执行staggeredGridViews onClick事件:

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {

    for(int i=0;i<mGridView.getChildCount();i++) {
        mGridView.getChildAt(i).setBackgroundColor(getResources().getColor(R.color.yellow)); 
       // set all items to yellow
    }
    mGridView.getChildAt(position).setBackgroundColor(getResources().getColor(R.color.blue)); 
    //set the selected items color to blue
}

希望这会有所帮助

答案 1 :(得分:1)

  

解决方案是远离任何引用的@color或@drawable   到listSelector里面的颜色。我创建了两个3x3像素.png文件。   每个都保存有伽玛层。就我而言,它是两种相同的颜色   每个都在Gimp中混合,颜色的透明度不同   层。因此,当您选择一个项目时,您会得到一个25%颜色的叠加层,   当你按下它时,你得到一个50%颜色的png。我把它们放在我的   drawables as bg_list_item_pressed.png和bg_list_item_highlighted.png

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

  <!-- Selected --> 
  <item 
    android:state_focused="true" 
    android:state_pressed="false" 
    android:drawable="@drawable/bg_list_item_highlighted" /> <!--  @drawable/tab_focus -->

  <!-- Pressed -->
  <item 
    android:state_pressed="true" 
    android:drawable="@drawable/bg_list_item_pressed" /> <!--  @drawable/tab_press -->

</selector> 

然后

android:listSelector="@drawable/list_selector"
android:drawSelectorOnTop="true"

答案 2 :(得分:1)

您应该更改该库中的一行而不是创建自己的选择器

1)在库中有一个名为StaggeredGridView

的类

该类中有一个名为useDefaultSelector()

的方法

在注释setSelector行并添加以下行:

setSelector(getResources().getDrawable(R.drawable.selector));

2)在库中的drawable文件夹中创建一个xml文件,如下所示:selector.xml

<?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:drawable="@color/transparent" />


<item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@color/transparent" />
<item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@color/transparent" />
<item android:state_focused="true"                                android:state_pressed="true" android:drawable="@color/yourColor1" />
<item android:state_focused="false"                               android:state_pressed="true" android:drawable="@color/yourColor2" />
<item android:state_focused="true"                                                             android:drawable="@color/yourColor3" />

</selector>