关闭

android手机卫士06-girdview优化

745人阅读 评论(0) 收藏 举报

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那里找一下 好啦,现在只要你想要在那一个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)
0
0
查看评论

手机卫士项目

1. 手机防盗功能:远程销毁数据, 远程锁屏, 远程警报, SIM卡变更报警, GPS追踪 2. 通讯卫士: 来电和短信黑名单的管理 3. 软件管理: 应用的列表展示, 应用的卸载,运行与分享 4. 流量管理: 显示所有应用的上传和下载流量 5. 进程管理: 显示所有运行进程列表和内存占用大小, 对...
  • miaozhenzhong
  • miaozhenzhong
  • 2016-09-05 13:06
  • 1482

Android手机卫士

这个项目是我学习了安卓开发后第一部作品。之所以选择做这个项目是因为这个项目能很好的把安卓开发中所需要用的技术点串连在一起,是一个很综合的项目。再加上我很善长GUI程序的开发制作,能把以前在Java Swing领域掌握的经验使用在这个项目上,从自己查资料到代码调试等只使用了一周的时间,或许会觉得有点赶...
  • Greentea107
  • Greentea107
  • 2014-09-24 09:42
  • 602

关于黑马手机卫士的学习总结

经过一个多月的不懈努力,终于完成了这个手机卫士的项目。时间都是挤出来的,不容易啊。现在稍稍的总结一下,分享给大家http://pan.baidu.com/s/1jIhtrIu (一)splash界面 1,网络访问数据       HttpUtils 异步访问服务...
  • qrj20112
  • qrj20112
  • 2017-02-10 19:58
  • 359

Android项目实战--手机卫士28--读取进程的信息并显示出来

今天呢,我们就继续我们的进程管理啦,昨天我们就讲到了拿到进程数目,以及可用的内存,那么今天,我们就把那些进程一个个的显示出来, 但在做今天这个之前,我先给大家提个醒,我觉得那个程序锁的界面有点不好看,所以就修改了一下,大家到时可以看看源码,我们就先把今天要做的,和那个程序锁的给大家看看先吧 ...
  • u011485531
  • u011485531
  • 2013-10-20 08:20
  • 7653

Linux版主机卫士安装使用

1、软件安装 1.1 必要环境 32 位系统必须使用 32 位程序,64 位系统必须使用 64 位程序 1.2 安装过程 步骤 1:到主机卫士官网(zhuji.360.cn)下载软件安装包(.tar.gz 格式)到服务器  64 位系统 wget http://zhuji.360...
  • maorenqi101
  • maorenqi101
  • 2015-06-09 10:53
  • 844

Android手机卫士之SplashActivity

手机卫士之Splash界面 splash: 溅,洒 定义一个SplashActivity作为一款软件的打开界面,它承担着在真正打开软件之前需完成的一些功能,如下面: 展现产品的logo提升产品的知名度  初始化操作(创建数据库,读取配置文件)  连接服务器检查软...
  • an13531829360
  • an13531829360
  • 2016-07-31 19:46
  • 215

Android手机卫士总结

安全卫士总结: 一、splash界面:     主要用于展示logo,初始化,检查版本更新,创建桌面图标等操作          初始化: 1、拷贝数据:  文件的输入输出流的使用 如:将电话...
  • zjf1165
  • zjf1165
  • 2015-09-19 19:57
  • 577

【android】仿360手机卫士的简易设计思路及源码

笔者最近一直忙于满广州的跑,实习好难找好难找,博客也是有点久没去更新。仿360手机卫士的实现的目的更多的是出于对常用知识点的一个巩固吧,比较适合像我这种接触没多久的学习者在学习之余拿来练手保持写代码的感觉的的一个不错的小项目。       涉及的技术:  ...
  • zjngogo
  • zjngogo
  • 2015-12-26 13:06
  • 7560

linux 主机卫士安装及使用

1、软件安装 1.1 必要环境 32 位系统必须使用 32 位程序,64 位系统必须使用 64 位程序 1.2 安装过程 步骤 1:到主机卫士官网(zhuji.360.cn)下载软件安装包(.tar.gz 格式)到服务器  64 位系统 wget h...
  • genziisme
  • genziisme
  • 2017-02-27 11:17
  • 733

Android手机卫士的第二天

1、设置Activity跳转时候的样式: overridePendingTransition(R.anim.alpha_in, R.anim.alpha_out); 这里也可以设置动画的其他效果。 2、自定义空间的获取控件id的情况 if (isSetup())...
  • hardcum2
  • hardcum2
  • 2012-07-27 20:31
  • 719
    本人新书
    个人资料
    • 访问:2244372次
    • 积分:29520
    • 等级:
    • 排名:第207名
    • 原创:763篇
    • 转载:268篇
    • 译文:25篇
    • 评论:397条
    技术公众号
      欢迎关注我的公众号,每天为你推荐最新的博文,与大家一起学习共同进步!
    博客专栏
    站长统计
    微博
    最新评论
    本人新作

    新书