197.m1-listView显示app的所有条目信息

xiaoxiao2021-02-28  130

AppInfo这个bean中已经包含了所需要显示的TextView和Url图片的地址,同时获取到数据,然后通过ListView进行显示。

显示rattingbar评级图的时候,使用到了一个layer-list图层的概念,利用图层实现。

process_ratingbar.xml背景是默认的颜色,灰色的星星。

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <!-- layer-list图层的形式 --> <item android:id="@+android:id/background" android:drawable="@drawable/rating_small_empty" /> <item android:id="@+android:id/secondaryProgress" android:drawable="@drawable/rating_small_half" /> <item android:id="@+android:id/progress" android:drawable="@drawable/rating_small_full" /> </layer-list> 加载图片的时候使用的是三级缓存:

1.网络2.本地3.内存

使用xUtils中的BitmapUtils,BitmapUtils不是单例,需要重载多个实例方法,需要将BitmapUtils整合成BitmapHelper一个单利的,保证BitmapUtils在应用中只有一份,方便管理图片。

BitmapHelper.java

package com.ldw.market.utils; import com.lidroid.xutils.BitmapUtils; /* * 使用BitmapUtils,显示图片 */ public class BitmapHelper { private BitmapHelper() { } private static BitmapUtils bitmapUtils; /** * BitmapUtils不是单例的 根据需要重载多个获取实例的方法 * * @param appContext * application context * @return */ public static BitmapUtils getBitmapUtils() { if (bitmapUtils == null) { // 第二个参数 缓存图片的路径 // 加载图片 最多消耗多少比例的内存 0.05-0.8f bitmapUtils = new BitmapUtils(UiUtils.getContext(), FileUtils .getIconDir().getAbsolutePath(), 0.3f); } return bitmapUtils; } } HomeFragment.java的逻辑代码,listView实现app相关的显示,同时利用BitmapUtils对图片的滑动,快速滑动图片的加载做了处理

package com.ldw.market.fragment; import java.util.List; import android.os.Bundle; import android.text.format.Formatter; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.RatingBar; import android.widget.TextView; import com.ldw.market.R; import com.ldw.market.domain.AppInfo; import com.ldw.market.http.HttpHelper; import com.ldw.market.protocol.HomeProtocal; import com.ldw.market.utils.UiUtils; import com.ldw.market.utils.BitmapHelper; import com.lidroid.xutils.BitmapUtils; import com.lidroid.xutils.bitmap.PauseOnScrollListener; /* * Home页面,主体的加载的几个页面和服务器请求数据都是在BaseFragment中去实现 */ public class HomeFragment extends BaseFragment { private List<AppInfo> appInfos; private BitmapUtils bitmapUtils; // 当Fragment挂载的activity创建的时候调用 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); show(); } public View createSuccessView() { ListView listView = new ListView(UiUtils.getContext()); listView.setAdapter(new HomeAdapter()); bitmapUtils = BitmapHelper.getBitmapUtils(); // 第二个参数 慢慢滑动的时候是否加载图片 false 加载 true 不加载 // 第三个参数 飞速滑动的时候是否加载图片 true 不加载 listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true)); bitmapUtils.configDefaultLoadingImage(R.drawable.ic_default); // 设置如果图片加载中显示的图片 bitmapUtils.configDefaultLoadFailedImage(R.drawable.ic_default);// 加载失败显示的图片 return listView; } private class HomeAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return appInfos.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return appInfos.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder holder; if(convertView == null){ view = View.inflate(UiUtils.getContext(), R.layout.item_app, null); holder = new ViewHolder(); holder.item_icon = (ImageView) view.findViewById(R.id.item_icon); holder.item_title = (TextView) view.findViewById(R.id.item_title); holder.item_size = (TextView) view.findViewById(R.id.item_size); holder.item_bottom = (TextView) view.findViewById(R.id.item_bottom); holder.item_rating = (RatingBar) view.findViewById(R.id.item_rating); view.setTag(holder); }else{ //复用view view = convertView; holder = (ViewHolder) view.getTag(); } AppInfo appInfo = appInfos.get(position); holder.item_title.setText(appInfo.getName());// 设置应用程序的名字 String size = Formatter.formatFileSize(UiUtils.getContext(), appInfo.getSize()); holder.item_size.setText(size); holder.item_bottom.setText(appInfo.getDes()); float stars = appInfo.getStars(); holder.item_rating.setRating(stars); // 设置ratingBar的值 String iconUrl = appInfo.getIconUrl(); //这个地址不全,需要加上apache地址"iconUrl": "app/com.youyuan.yyhl/icon.jpg", //http://127.0.0.1:8090/image?name=app/com.youyuan.yyhl/icon.jpg //第一个参数是显示图片的控件,第二个参数是显示图片的url bitmapUtils.display(holder.item_icon, HttpHelper.URL+"image?name="+iconUrl); // 显示图片的控件 //bitmapUtils.display(holder.item_icon, HttpHelper.URL+"image?name="+iconUrl); return view; } } static class ViewHolder{ ImageView item_icon; TextView item_title,item_size,item_bottom; RatingBar item_rating; } @Override public LoadResult load() { HomeProtocal protocol = new HomeProtocal(); appInfos = protocol.load(0); return checkData(appInfos); } //校验数据 private LoadResult checkData(List<AppInfo> appInfos){ if(appInfos == null){ return LoadResult.error;//请求服务器数据失败 }else{ if(appInfos.size() == 0){ return LoadResult.empty; }else{ return LoadResult.success; } } } } 布局文件item_app.xml

<?xml version="1.0" encoding="utf-8"?> <!-- 凡是以layout开头的属性 其实都是经过父容器批准才能生效 因为在listView 中 layout_height 无论写什么熟悉 都是包裹内容 --> <!-- 为了让listView的高度生效,必须创建一个父窗体 --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="113dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:background="@drawable/list_item_bg" > <RelativeLayout android:id="@+id/item_top" android:layout_width="match_parent" android:layout_height="72dp" > <ImageView android:id="@+id/item_icon" android:layout_width="48dp" android:layout_height="48dp" android:layout_centerVertical="true" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:src="@drawable/ic_default" /> <RelativeLayout android:id="@+id/item_action" android:layout_width="70dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:gravity="center" > <FrameLayout android:id="@+id/action_progress" android:layout_width="27dp" android:layout_height="27dp" android:layout_centerHorizontal="true" android:background="@drawable/ic_download" /> <TextView android:id="@+id/action_txt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/action_progress" android:layout_marginTop="5dp" android:ellipsize="end" android:gravity="center" android:singleLine="true" android:textColor="#ff7a7a7a" android:textSize="12dp" android:text="下载" /> </RelativeLayout> <RelativeLayout android:id="@+id/item_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toLeftOf="@id/item_action" android:layout_toRightOf="@id/item_icon" > <TextView android:id="@+id/item_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:singleLine="true" android:textColor="#ff333333" android:textSize="16dp" /> <RatingBar android:id="@+id/item_rating" android:layout_width="wrap_content" android:layout_height="14dp" android:layout_below="@id/item_title" android:layout_marginBottom="2dp" android:layout_marginTop="2dp" android:isIndicator="true" android:progressDrawable="@drawable/process_ratingbar" android:rating="2.5" /> <TextView android:id="@+id/item_size" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/item_rating" android:singleLine="true" android:textColor="#ff7a7a7a" android:textSize="12dp" /> </RelativeLayout> </RelativeLayout> <View android:id="@+id/item_divider" android:layout_width="match_parent" android:layout_height="1dp" android:layout_below="@id/item_top" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:background="@color/item_divider" /> <TextView android:id="@+id/item_bottom" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_below="@id/item_divider" android:layout_marginLeft="12dp" android:layout_marginRight="12dp" android:ellipsize="end" android:gravity="center_vertical" android:singleLine="true" android:textColor="#ff717171" android:textSize="14dp" /> </RelativeLayout> </FrameLayout> 会使用到状态选择器res/drawable/list_item_bg.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <!-- app条目中点击和不点击会显示不同的颜色 --> <item android:state_pressed="true" android:drawable="@drawable/list_item_bg_pressed"></item> <item android:drawable="@drawable/list_item_bg_normal"></item> </selector>横线是使用res/values/colors.xml中设置颜色的

<?xml version="1.0" encoding="utf-8"?> <resources> <color name="indicatorcolor">#FF0084FF</color> <color name="item_divider">#ffd7d7d7</color> </resources>

转载请注明原文地址: https://www.6miu.com/read-29222.html

最新回复(0)