android手机卫士06-girdview优化


ListView和GridView是我们经常会使用的控件,所以它们的效率是一个非常重要的事情,如果我们滑动的时候,会出现停顿的现在,那么,这次是一个非常不好的体验。所以我们有必要要对这些控件进行优化。

其实,我们用这些控件的时候,都是通过adapter来进行给这些控件添加item的,所以我们的优化也就是在adapter里面进行的。其实这个优化方法也很简单,就是在进行view的绘制的时候,我们判断一下,是不是已经绘制过啦,如果绘制过了,那么就使用原来的,如果没有绘制过,那么就重新绘制。直接上代码,大家可以与我们之前写的那个adapter比较一下有什么不同

com.xiaobin.security.adapter.MainUIAdapter

  1. package com.xiaobin.security.adapter;

  2. import android.content.Context;
  3. import android.content.SharedPreferences;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.BaseAdapter;
  8. import android.widget.ImageView;
  9. import android.widget.TextView;

  10. import com.xiaobin.security.R;

  11. public class MainUIAdapter extends BaseAdapter
  12. {
  13.         private static final String[] NAMES = new String[] {"手机防盗", "通讯卫士", "软件管理", "流量管理", "任务管理", "手机杀毒",
  14.                         "系统优化", "高级工具", "设置中心"};
  15.        
  16.         private static final int[] ICONS = new int[] {R.drawable.widget01, R.drawable.widget02, R.drawable.widget03,
  17.                         R.drawable.widget04, R.drawable.widget05, R.drawable.widget06, R.drawable.widget07,
  18.                         R.drawable.widget08, R.drawable.widget09};
  19.        
  20.         private Context context;
  21.         private LayoutInflater inflater;
  22.         private SharedPreferences sp;
  23.        
  24.         public MainUIAdapter(Context context)
  25.         {
  26.                 this.context = context;
  27.                 inflater = LayoutInflater.from(this.context);
  28.                 sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
  29.         }

  30.         @Override
  31.         public int getCount()
  32.         {
  33.                 return NAMES.length;
  34.         }

  35.         @Override
  36.         public Object getItem(int position)
  37.         {
  38.                 return position;
  39.         }

  40.         @Override
  41.         public long getItemId(int position)
  42.         {
  43.                 return position;
  44.         }

  45.         @Override
  46.         public View getView(int position, View convertView, ViewGroup parent)
  47.         {
  48.                 //convertView 相当于缓存一样,只要我们判断一下它是不是为null,就可以知道现在这个view有没有绘制过出来
  49.                 //如果没有,那么就重新绘制,如果有,那么就可以使用缓存啦,这样就可以大大的节省view绘制的时间了,进行了优化,使ListView更加流畅
  50.                 MainViews views;
  51.                 View view;
  52.                 if(convertView == null)
  53.                 {
  54.                         views = new MainViews();
  55.                         view = inflater.inflate(R.layout.main_item, null);
  56.                         views.imageView = (ImageView) view.findViewById(R.id.iv_main_icon);
  57.                         views.textView = (TextView) view.findViewById(R.id.tv_main_name);
  58.                         views.imageView.setImageResource(ICONS[position]);
  59.                         views.textView.setText(NAMES[position]);
  60.                        
  61.                         view.setTag(views);
  62.                 }
  63.                 else
  64.                 {
  65.                         view = convertView;
  66.                         views = (MainViews) view.getTag();
  67.                         views.imageView = (ImageView) view.findViewById(R.id.iv_main_icon);
  68.                         views.textView = (TextView) view.findViewById(R.id.tv_main_name);
  69.                         views.imageView.setImageResource(ICONS[position]);
  70.                         views.textView.setText(NAMES[position]);
  71.                 }
  72.                        
  73.                 if(position == 0)
  74.                 {
  75.                         String name = sp.getString("lostName", "");
  76.                         if(!name.equals(""))
  77.                         {
  78.                                 views.textView.setText(name);
  79.                         }
  80.                 }
  81.                
  82.                 return view;
  83.         }
  84.        
  85.         //==================================================================================
  86.        
  87.         //一个存放所有要绘制的控件的类
  88.         private class MainViews
  89.         {
  90.                 ImageView imageView;
  91.                 TextView textView;
  92.         }
  93.        
  94. }

复制代码
就这样,我们的GridView就优化好啦, 大家是不是看到别人的应用的Button按下去,或获得焦点,都会有不同的显示的,其实也很简单,我们现在就为我们之前的那些对话框加上这一效果,其实这些在api文档里面也是有的,在我们的自定义图片这里面就有说到在那里找到那些东西的,有兴趣的可以去看看现在我们要在drawable目录下面新建一个xmlbutton_selector.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >
  3.    
  4.     <item android:state_pressed="true" android:drawable="@drawable/title_background"></item>
  5.     <item android:state_focused="true" android:drawable="@drawable/title_background"></item>
  6.     <item android:drawable="@drawable/button_normal" /><!-- 这个是默认状态下的 -->

  7. </selector>

复制代码
就这样子,我们的一个button在按下去时就会显示成不同的样子的啦,其实还有其他属性的,有兴趣的可以去api那里找一下 android手机卫士06-girdview优化_第1张图片 好啦,现在只要你想要在那一个Button显示成这个样子,那么你只要把它的Background指定成这个xml就行的啦
  1.             <Button
  2.                 android:id="@+id/bt_protected_first_yes"
  3.                 android:layout_width="140dip"
  4.                 android:layout_height="40dip"
  5.                 android:background="@drawable/button_selector"
  6.                 android:text="@string/protectedYes"/>
复制代码
现在我们如法泡制,为我们的GridView也添加这样一样样式,在按下去时,显示有所不同在drawable下面新建一个xmlitem_background_selector.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >
  3.    
  4.     <item android:state_pressed="true" android:drawable="@drawable/item_background_select"></item>

  5. </selector>

复制代码
是不是很简单的呢,不过,要在GridView里面显示这个,那个指定方式,就有些不同啦,我们在GridView里面指定一个这样的属性就可以的啦 listSelector
  1. <GridView
  2.         android:id="@+id/gv_main"
  3.         android:layout_width="match_parent"
  4.         android:layout_height="match_parent"
  5.         android:listSelector="@drawable/item_background_selector"
  6.         android:verticalSpacing="8dip"
  7.         android:layout_marginTop="10dip"
  8.         android:numColumns="2" />
复制代码
就这样,我们就可以指定GridView的item按下去时,会显示成不同的样子啦 好啦,今天就到这里啦,如果有什么不明白的,欢迎留言,也可以去看一下,我们之前的文章,毕竟是一直承接下来的,是一个完整的项目来的。 Security_06GridView的优化与修改Button的显示样式.rar(609.73 KB, 下载次数: 135)

你可能感兴趣的:(android手机卫士06-girdview优化)