效果图
代码部分
ListViewActivity(显示ListView的Activity)
package com.gaojc.activity; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import com.gaojc.adapter.MyAdapter; import com.gaojc.data.MyData; import com.gaojc.text.R; import java.util.ArrayList; public class ListViewActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_view); ListView myListView = findViewById(R.id.myListView); // 创建数据源 ArrayList<MyData> myData = new ArrayList<>(); // 适配器类(用来给ListView填充数据) MyAdapter myAdapter = new MyAdapter(ListViewActivity.this,myData); /** * 添加假数据 */ for (int i = 0; i < 15; i++) { myAdapter.add(new MyData(0.1 + i + "",10 + i + "%")); } // 设置创建生成的数据适配器 myListView.setAdapter(myAdapter); } }
相对应的xml文件(activity_list_view.xml)
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.gaojc.activity.ListViewActivity" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="ListView示例" android:gravity="center" android:textSize="30dp"/> <ListView android:id="@+id/myListView" android:layout_width="300dp" android:layout_height="450dp" android:layout_gravity="center" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="15dp" android:paddingBottom="20dp" android:divider="@null" android:dividerHeight="5dp" android:background="@drawable/every_day_get_money_bg1"/> </FrameLayout>
ListView属性介绍
android:divider="@null" :不显示分割线 android:dividerHeight="5dp" :指定分割线的高 android:scrollbars="none" :隐藏滚动条
MyData数据源
package com.gaojc.data; public class MyData { public String money; //显示金额 public String ratio; //比例 public MyData(String money, String ratio) { this.money = money; this.ratio = ratio; } public String getRatio() { return ratio; } } packa
MyAdapter适配器类
package com.gaojc.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.gaojc.data.MyData; import com.gaojc.text.R; import com.gaojc.text.Utils.LogUtil; import java.util.ArrayList; /** * 适配器类(用来给ListView填充数据) * 需要继承 BaseAdapter */ public class MyAdapter extends BaseAdapter { public Context context; public ArrayList<MyData> myData; public MyAdapter(Context context, ArrayList<MyData> myData) { this.context = context; this.myData = myData; } /** * @return:要绑定的条目的数目(格子的数量) */ @Override public int getCount() { return myData.size(); } /** * 根据索引(位置)获得该位置的对象 * @param i:索引 * @return:获取该位置的对象 */ @Override public MyData getItem(int i) { // 这里的返回类型改为自己的数据类 return myData.get(i); } /** * @return: 返回条目的id */ @Override public long getItemId(int i) { return i; } /** * 获取该条目要显示的界面 * @param i:当前条目 * @param convertView:绘制好的视图 * @param viewGroup:对应的xml文件(单个条目 list_view_adapter.xml) * @return */ @Override public View getView(int i, View convertView, ViewGroup viewGroup) { MyData myData = getItem(i); //获取当前位置的对象 View view; ViewHolder viewHolder; if (convertView == null) { // 把xml布局文件解析成View view = LayoutInflater.from(context).inflate(R.layout.list_view_adapter, viewGroup, false); // 添加数据 setTag:监听相对应的事件 viewHolder = new ViewHolder(); viewHolder.textMoney = view.findViewById(R.id.textMoney); viewHolder.textMoneyTwo = view.findViewById(R.id.textMoneyTwo); viewHolder.listViewProBar = view.findViewById(R.id.listViewProBar); viewHolder.ratio = view.findViewById(R.id.ratio); viewHolder.getButton = view.findViewById(R.id.getButton); view.setTag(viewHolder); } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); //重新获取ViewHolder } viewHolder.getButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { LogUtil.e("点击了领取按钮"); // 获取比例 String ratio = myData.getRatio(); LogUtil.e("比例是:" + ratio); if (ratio.equals("100%")) { Toast.makeText(context, "可以提现", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "不能提现", Toast.LENGTH_SHORT).show(); } } }); // 设置各节点内容 viewHolder.textMoney.setText(myData.money + "元"); viewHolder.textMoneyTwo.setText(myData.money + "元奖励进度"); String ratio = myData.ratio.replace("%", ""); viewHolder.listViewProBar.setProgress(Integer.parseInt(ratio)); viewHolder.ratio.setText(myData.ratio); return view; } // 需要的数据 private class ViewHolder { TextView textMoney; //红包金额 TextView textMoneyTwo; //金额奖励进度 ProgressBar listViewProBar; //进度比例 TextView ratio; //显示的进度比例数 Button getButton; //领取按钮 } // 添加数据方法 public void add(MyData data){ if (myData == null){ myData = new ArrayList<>(); } myData.add(data); } }
单个View条目xml(list_view_adapter.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="60dp" android:background="@drawable/every_day_get_money_listview_item_background"> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="2.5" android:background="@drawable/red_package"/> <TextView android:id="@+id/textMoney" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" android:text="0.3元" android:background="@drawable/red_package_2" android:gravity="center" android:textColor="#FF0000"/> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3" android:orientation="vertical"> <TextView android:id="@+id/textMoneyTwo" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="0.3元奖励进度" android:gravity="center"/> <FrameLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:layout_marginBottom="5dp"> <ProgressBar android:id="@+id/listViewProBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/progress_bg" android:progress="60" android:progressDrawable="@drawable/storage_bar" /> <TextView android:id="@+id/ratio" android:layout_width="match_parent" android:layout_height="match_parent" android:text="60%" android:gravity="center" android:textColor="#FFFFFF"/> </FrameLayout> </LinearLayout> <Button android:id="@+id/getButton" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.1" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:background="@drawable/receive"/> </LinearLayout>
加载进度所需要的进度条(storage_bar.xml)
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 绿色进度条--> <item android:id="@android:id/progress"> <scale android:scaleWidth="100%"> <shape> <corners android:radius="15dip"/> <solid android:color="#66CC08"/> </shape> </scale> </item> </layer-list>