android手机卫士06-girdview优化
ListView和GridView是我们经常会使用的控件,所以它们的效率是一个非常重要的事情,如果我们滑动的时候,会出现停顿的现在,那么,这次是一个非常不好的体验。所以我们有必要要对这些控件进行优化。
其实,我们用这些控件的时候,都是通过adapter来进行给这些控件添加item的,所以我们的优化也就是在adapter里面进行的。其实这个优化方法也很简单,就是在进行view的绘制的时候,我们判断一下,是不是已经绘制过啦,如果绘制过了,那么就使用原来的,如果没有绘制过,那么就重新绘制。直接上代码,大家可以与我们之前写的那个adapter比较一下有什么不同
com.xiaobin.security.adapter.MainUIAdapter
- package com.xiaobin.security.adapter;
- import android.content.Context;
- import android.content.SharedPreferences;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.TextView;
- import com.xiaobin.security.R;
- public class MainUIAdapter extends BaseAdapter
- {
- private static final String[] NAMES = new String[] {"手机防盗", "通讯卫士", "软件管理", "流量管理", "任务管理", "手机杀毒",
- "系统优化", "高级工具", "设置中心"};
-
- private static final int[] ICONS = new int[] {R.drawable.widget01, R.drawable.widget02, R.drawable.widget03,
- R.drawable.widget04, R.drawable.widget05, R.drawable.widget06, R.drawable.widget07,
- R.drawable.widget08, R.drawable.widget09};
-
- private Context context;
- private LayoutInflater inflater;
- private SharedPreferences sp;
-
- public MainUIAdapter(Context context)
- {
- this.context = context;
- inflater = LayoutInflater.from(this.context);
- sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
- }
- @Override
- public int getCount()
- {
- return NAMES.length;
- }
- @Override
- public Object getItem(int position)
- {
- return position;
- }
- @Override
- public long getItemId(int position)
- {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent)
- {
- //convertView 相当于缓存一样,只要我们判断一下它是不是为null,就可以知道现在这个view有没有绘制过出来
- //如果没有,那么就重新绘制,如果有,那么就可以使用缓存啦,这样就可以大大的节省view绘制的时间了,进行了优化,使ListView更加流畅
- MainViews views;
- View view;
- if(convertView == null)
- {
- views = new MainViews();
- view = inflater.inflate(R.layout.main_item, null);
- views.imageView = (ImageView) view.findViewById(R.id.iv_main_icon);
- views.textView = (TextView) view.findViewById(R.id.tv_main_name);
- views.imageView.setImageResource(ICONS[position]);
- views.textView.setText(NAMES[position]);
-
- view.setTag(views);
- }
- else
- {
- view = convertView;
- views = (MainViews) view.getTag();
- views.imageView = (ImageView) view.findViewById(R.id.iv_main_icon);
- views.textView = (TextView) view.findViewById(R.id.tv_main_name);
- views.imageView.setImageResource(ICONS[position]);
- views.textView.setText(NAMES[position]);
- }
-
- if(position == 0)
- {
- String name = sp.getString("lostName", "");
- if(!name.equals(""))
- {
- views.textView.setText(name);
- }
- }
-
- return view;
- }
-
- //==================================================================================
-
- //一个存放所有要绘制的控件的类
- private class MainViews
- {
- ImageView imageView;
- TextView textView;
- }
-
- }
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:andro >
-
- <item android:state_pressed="true" android:drawable="@drawable/title_background"></item>
- <item android:state_focused="true" android:drawable="@drawable/title_background"></item>
- <item android:drawable="@drawable/button_normal" /><!-- 这个是默认状态下的 -->
- </selector>

- <Button
- android:
- android:layout_width="140dip"
- android:layout_height="40dip"
- android:background="@drawable/button_selector"
- android:text="@string/protectedYes"/>
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:andro >
-
- <item android:state_pressed="true" android:drawable="@drawable/item_background_select"></item>
- </selector>
- <GridView
- android:
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:listSelector="@drawable/item_background_selector"
- android:verticalSpacing="8dip"
- android:layout_marginTop="10dip"
- android:numColumns="2" />

最后更新:2017-04-03 12:53:36