在列表视图上绘图

时间:2013-09-17 22:20:57

标签: android android-listview

我正在尝试使列表视图看起来渐渐变为黑色。基本上我想转这样的事情:

original list

进入类似的事情:

desired effect

我尝试了两种不同的方法: 第一个是覆盖ListView的onDraw(),这不起作用,我的“额外”绘图发生在listView后面。第二种方法是将另一个视图放在listView的顶部,这看起来是正确的,但是如果用户试图通过触摸视图滚动列表而不滚动视图,则看起来该视图消耗了touchevent,所以大约三分之一的名单是不可触及的。

关于如何实现这一点的任何提示?

1 个答案:

答案 0 :(得分:2)

您可以在自定义视图中指定listitem背景。在getview(适配器类)中,基于项目位置。在xml中创建渐变并根据位置增加alpha值。

这是对我有用的代码。

listItem.xml

<?xml version="1.0" encoding="utf-8"?>

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            android:minHeight="64dp">    
<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="17sp"
        android:textColor="@android:color/white"
        android:id="@+id/textView"/>

 </RelativeLayout>

ItemAdapter.java

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(rowResourceId, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.textView);

    int id = Integer.parseInt(Ids[position]);
    textView.setText(Model.GetbyId(id).name);

   // this is the main idea behind the UX look n feel.
    rowView.setBackgroundColor(context.getResources().getColor(android.R.color.black));
    textView.setAlpha((float) position/Ids.length);

    return rowView;

}

请随意在getView中使用holder设计模式。这只是一个概念证明。