android---gettag()与settag()的妙用
2015-08-28 22:17
288 查看
在android中,settag(Object)是可以给一个view添加一个特殊的标签,然后用gettag()获取这个标签.
用处1:多个button设置不同tag,通过tag区分
OnClickListener listener = new OnClickListener() { public void onClick(View v) { //获取当前view对应的数字 int cellId = (Integer) v.getTag(); cellClicked(cellId, v); } } View v; for (int i = 0; i < 20; i++) { v = findViewById(cellIDs[i]); v.setOnClickListener(listener); v.setTag(i); }
用法2:在adapter中的getview实现回收的convertView的复用(这代码高亮搞不好,总是出问题)
@Override public View getView(int position, View convertView, ViewGroup parent) { phonedemo demo; if (convertView==null) { convertView = LayoutInflater.from(context).inflate(R.layout.cell, null); demo = new phonedemo(); demo.name = (TextView) convertView.findViewById(R.id.name); demo.number = (TextView) convertView.findViewById(R.id.number); demo.img = (ImageView) convertView.findViewById(R.id.imageView1); demo.name.setText(data.get(position).getName()); demo.number.setText(data.get(position).getNumber()); // demo.img.setImageResource(data.get(position).getId()); //利用tag达到循环利用资源 convertView.setTag(demo); }else { //这里获取已经回收的demo,并不用重新创建,这样就可以 直接复用,节省资源 demo = (phonedemo) convertView.getTag(); demo.name.setText(data.get(position).getName()); demo.number.setText(data.get(position).getNumber()); // demo.img.setImageResource(data.get(position).getId()); } return convertView; } public static class phonedemo{ TextView name,number; ImageView img; }
用处3:当开关来使用,比如对于手电筒,tag设置为true开启,为false,关闭.
//控制语句 if ((Boolean) flashlight.getTag() == false) { startflashlight(); }else{ stopflashlight(); }
protected void startflashlight() { //使用transitiondrawable来控制动画,也就是flashlight.xml这个文件 TransitionDrawable drawable = (TransitionDrawable) flashlight.getDrawable(); //控制转变时间200毫秒 drawable.startTransition(200); //设置标识,如果被打开,则tag为true flashlight.setTag(true); /* * 下面开始打开照相机,然后处理图像到后台,然后设置闪光灯打开 */ try { /* * camera和其组件之间的交流,通过参数parmeters来进行关联,camera可以获取当前的状态参数 * 再通过setparameters来进行设置新的参数 */ mcamera = Camera.open();//打开照相机 int texttrueid = 0; //?暂时不知道是啥 mcamera.setPreviewTexture(new SurfaceTexture(texttrueid)); mcamera.startPreview(); mparaters = mcamera.getParameters(); //设置打开闪光的,并点亮 mparaters.setFlashMode(Parameters.FLASH_MODE_TORCH); mcamera.setParameters(mparaters); } catch (Exception e) { } } /* * 控制闪光的的关闭 */ protected void stopflashlight() { TransitionDrawable drawable = (TransitionDrawable) flashlight.getDrawable(); if((Boolean) flashlight.getTag()){ drawable.reverseTransition(200); flashlight.setTag(false); if(mcamera != null){ mparaters = mcamera.getParameters(); mparaters.setFlashMode(Parameters.FLASH_MODE_OFF); mcamera.setParameters(mparaters); mcamera.stopPreview();//停止预览 mcamera.release();//释放掉资源,不然下次打不开 mcamera = null;//设置为null为了垃圾回收机制尽快回收 } } }
上面三个例子都挺常用的,tag的妙用还是能节省不少代码的,对于程序美观性还是有不少作用的.
相关文章推荐
- android头像设置功能
- android Scaletype
- Android设置系统时区
- Android程序设计:多线程同步数据的三种方法的调用代码
- 0828Android基础自定义Dialog+DatePickerDialog+TimePickerDialog+PopupWindow+Notification
- Android应用程序用户界面(四)
- android中focusable和focusableInTouchMode
- Android学习笔记之ExecutorService线程池的应用....
- Mars Chen培训之真机调试android程序
- Android-Fragment基本使用及向下兼容
- Android照片墙实现 -- 图片加载,防止OOM的处理办法
- android屏幕分辨率适配
- android中<include><merge><ViewStub>
- Android中使用overridePendingTransition实现Activity切换动画
- Android照片墙实现 -- 布局设计以及数据处理
- Android——Notification的使用
- Android中你也许不知道的线性布局Layout_weight属性权重比例分配原理
- Android Fragment 你应该知道的一切
- Android- BroadCastReceiver 基础学习
- Android中利用Gson解析Json