Adapter是listview和数据源间的中间人。002003当每条数据进入可见区域时,adapter的getview()会被调用,返回代表具体数据的视图。触摸滚动时,频繁调用。支持成百上千条数据。004005下面为显示每条数据的xml文件:006007LinearLayout008xmlns:android=:orientation=horizontal010ImageViewandroid:id=@+id/icon011android:layout_width=48dip012android:layout_height=48dip/013TextViewandroid:id=@+id/text014android:layout_gravity=center_vertical015android:layout_width=0dip016android:layout_weight=1.0017android:layout_height=wrap_content/018/LinearLayout0190201。最简单的方法,最慢且最不实用021022publicViewgetView(intpos,ViewconvertView,023ViewGroupparent){024Viewitem=mInflater.inflate(R.layout.list_item,null);025((TextView)item.findViewById(R.id.text)).026setText(DATA[pos]);027((ImageView)item.findViewButId(R.id.icon)).028setImageBitmap((pos&1)==1?mIcon1:mIcon2);029returnitem;030}0310322。利用convertview回收视图,效率提高200%。033034publicViewgetView(intpos,ViewconvertView,035ViewGroupparent){036if(convertView==null){037convertView=mInflater.inflate(038R.layout.list_item,null);039}040((TextView)convertView.findViewById(R.id.text)).041setText(DATA[pos]);042((ImageView)convertView.findViewButId(R.id.icon)).043setImageBitmap((pos&1)==1?mIcon1:mIcon2);044returnconvertView;045}0460473。利用viewholder模式,效率在提高50%048049staticclassViewHolder{050TextViewtext;051ImageViewicon;052}053054055056publicViewgetView(intpos,ViewconvertView,ViewGroupparent){057ViewHolderholder;058if(convertView==null){059convertView=mInflater.inflate(R.layout.list_item,null);060holder=newViewHolder();061holder.text=(TextView)convertView.findViewById(062R.id.text));063holder.icon=(ImageView)convertView.findViewButId(064R.id.icon));065convertView.setTag(holder);066}else{067holder=(ViewHolder)convertView.getTag();068}069holder.text.setText(DATA[pos]);070holder.icon.setImageBitmap((pos&1)==1?mIcon1:mIcon2);071returnconvertView;072}073074adapter更新效率比较:0750761的更新不到10frames/second0770782的更新接近30frames/second0790803的更新接近40frames/second081082背景和图像083084视图背景图像总会填充整个视图区域0850861。图像尺寸不合适会导致自动缩放0870882。避免实时缩放0890903。最好预先缩放到视图大小091092originalImage=Bitmap.createScaledBitmap(093originalImage,//�缩放图像094view.getWidth(),//视图宽度095view.getHeight(),//视图高度096true);//�线性过滤器0970981的效率接近25frames/second0991002的效率接近50frames/second101102默认情况下,窗口有一个不透明的背景103104有时可以不需要105106-��最高层的视图是不透明的107108-�最高层的视图覆盖整个窗口109110layout_width=fill_parent111layout_height=fill_parent112113更新看不见的背景是浪费时间114115删除窗口背景:1161171。修改编码118119publicvoidonCreate(Bundleicicle){120super.onCreate(icicle);121setContentView(R.layout.mainview);122//删除窗口背景123getWindow().setBackgroundDrawable(null);124...125}1261272。修改xml128129130131首先确定你的res/values/styles.xml有132133resources134stylename=NoBackgroundThemeparent=android:Theme135itemname=android:windowBackground@null/item136/style137/resources138139然后编辑androidmainfest.xml140141activityandroid:name=MyApplication142android:theme=@style/NoBackgroundTheme143...144/activity145146更新请求147148当屏幕需要更新时,调用invalidate()方法,简单方便,但是更新了整个视图,代价太高。149150最好先找到无效区域,然后调用151152invalidate(Rectdirty);153invalidate(intleft,inttop,intright,int154bottom);155156视图和布局157158如果一个窗口包含很多视图,启动太慢,绘制时间长,用户界面反应速度很慢159160解决方法:1611621。使用textview的复合drawable减少层次163164TextView165android:layout_width=wrap_content166android:layout_height=wrap_content167android:text=@string/hello168android:drawableLeft=@drawable/icon/1691702。使用viewstuf延迟展开视图171172在xml文件中定义viewstuf173174ViewStubandroid:id=@+id/stub_import175android:inflatedId=@+id/panel_import176android:layout=@layout/progress_overlay177android:layout_width=fill_parent178android:layout_height=wrap_content179android:layout_gravity=bottom/180181在需要展开视图时,182183findViewById(R.id.stub_import).setVisibility(View.VISIBLE);184//或者185ViewimportPanel=((ViewStub)186findViewById(R.id.stub_import)).inflate();1871883。使用merge合并中间视图189190默认情况下,布局文件的根作为一个节点,加入到父视图中,如果使用merge可以避免根节点191192mergexmlns:android=193!--Content--195/merge1961974。使用ralativelayout减少层次198199RelativeLayoutxmlns:android=:layout_width=fill_parentandroid:layout_height=wrap_content201ImageViewandroid:id=@+id/icon202android:layout_width=48dipandroid:layout_height=48dip203android:layout_alignParentLeft=true204android:layout_centerVertical=true/205TextViewandroid:layout_width=wrap_content206android:layout_height=wrap_contentandroid:id=@+id/text_line1207android:layout_alignParentTop=true208android:layout_toRightOf=@id/icon/209TextViewandroid:layout_width=wrap_content210android:layout_height=wrap_contentandroid:id=@+id/text_line2211android:layout_toRightOf=@id/icon212android:layout_below=@id/text_line1/213Checkboxandroid:id=@+id/star214android:layout_width=48dipandroid:layout_height=48dip215android:layout_alignParentRight=true216android:layout_centerVertical=true/217/RelativeLayout2182195.使用自定义视图220221classCustomViewextendsView{222@Override223protectedvoidonDraw(Canvascanvas){224//加入你的绘图编码225}226@Override227protectedvoidonMeasure(intwidthMeasureSpec,228inthe