2

リストビューを上に向かって黒くフェードアウトさせようとしています。基本的に、私はこのようなものを変えたいです:

オリジナルリスト

このようなものに:

望ましい効果

これに対して 2 つの異なるアプローチを試みました。最初のアプローチは、ListView の onDraw() をオーバーライドすることでした。これは機能しませんでした。「余分な」描画が listView の背後で行われました。2 番目のアプローチは、listView の上に別のビューを配置することでした。これは正しいように見えますが、ユーザーがビューがスクロールしない画面をタッチしてリストをスクロールしようとすると、ビューが touchevent を消費するように見えるため、リストの約 3 分の 1 は手に負えません。

これを実装する方法に関するヒントはありますか?

4

1 に答える 1

2

カスタマイズされたビューでリスト項目の背景を割り当てることができます。項目の位置に基づいて (アダプター クラスの) getview で。xml でグラデーションを作成し、位置に基づいてアルファ値を増やします。

これは私のために働いているコードです。

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内のホルダーデザインパターンはご自由にお使いください。これは単なる概念実証です。

于 2013-09-17T22:32:27.963 に答える