乐读文学

Android从入门到精通

乐读文学 > 科普学习 > Android从入门到精通

第45页

书籍名:《Android从入门到精通》    作者:明日科技




return  imageview;  //返回ImageView



}



/*



*  功能:获得当前选项的id



*/



@Override



public  long  getItemId(int  position)  {



return  position;



}



/*



*  功能:获得当前选项



*/



@Override



public  Object  getItem(int  position)  {



return  position;



}



/*



*  获得数量



*/



@Override



public  int  getCount()  {



return  imageId.length;



}



};

(6)将步骤(5)中创建的适配器与Gallery关联,并且让中间的图片选中,为了在用户单击某张图片时显示对应的位置,还需要为Gallery添加单击事件监听器,具体代码如下:

gallery.setAdapter(adapter);  //将适配器与Gallery关联



gallery.setSelection(imageId.length  /  2);  //选中中间的图片



gallery.setOnItemClickListener(new  OnItemClickListener()  {



@Override



public  void  onItemClick(AdapterView  parent,  View  view,int  position,  long  id)  {



Toast.makeText(MainActivity.this,"您选择了第"  +  String.valueOf(position)  +  "张图片",



Toast.LENGTH_SHORT).show();



}



});

运行本实例,将显示如图4.10所示的运行结果。



图4.10 应用画廊视图显示图片列表

4.1.8 范例1:显示在标题上的进度条

例4.9   在Eclipse中创建Android项目,名称为4.9,实现在页面载入时,先在标题上显示载入进度条,载入完毕后,显示载入后的4张图片。(实例位置:光盘\TM\sl\4\4.9)

(1)修改新建项目的res\layout目录下的布局文件main.xml,为默认添加的垂直线性布局管理器设置一个android:id属性,关键代码如下:

android:id="@+id/linearlayout1"

(2)在主活动MainActivity中,定义一个用于保存要显示图片id的数组(需要将要显示的图片复制到res\drawable文件夹中)和一个垂直线性布局管理器的对象,关键代码如下:

private  int  imageId[]  =  new  int[]  {  R.drawable.img01,  R.drawable.img02,



R.drawable.img03,  R.drawable.img04  };  //定义并初始化一个保存要显示图片id的数组



private  LinearLayout  l;  //定义一个垂直线性布局管理器的对象

(3)在主活动的onCreate()方法中,首先设置显示水平进度条,然后设置要显示的视图,这里为主布局文件main.xml,接下来再获取布局文件中添加的垂直线性布局管理器,关键代码如下:

requestWindowFeature(Window.FEATURE_PROGRESS);  //显示水平进度条



setContentView(R.layout.main);



l  =  (LinearLayout)  findViewById(R.id.linearlayout1);  //获取布局文件中添加的垂直线性布局管理器

(4)创建继承自AsyncTask的异步类,并重写onPreExecute()、doInBackground()、onProgressUpdate()和onPostExecute()方法,实现在向页面添加图片时,在标题上显示一个水平进度条,当图片载入完毕后,隐藏进度条并显示图片,具体代码如下:

/**



*  功能:创建异步任务,添加4张图片



*



*/



class  MyTack  extends  AsyncTask  {



@Override



protected  void  onPreExecute  ()  {



setProgressBarVisibility(true);  //执行任务前让进度条可见



super.onPreExecute();



}



/*



*  功能:要执行的耗时任务



*/



@Override



protected  LinearLayout  doInBackground  (Void...  params)  {



LinearLayout  ll  =  new  LinearLayout(MainActivity.this);  //创建一个水平线性布局管理器



for  (int  i  =  1;  i  <  5;  i++)  {



ImageView  iv  =  new  ImageView(MainActivity.this);  //创建一个ImageView对象



iv.setLayoutParams(new  LayoutParams(245,  108));



iv.setImageResource(imageId[i  -  1]);  //设置要显示的图片



ll.addView(iv);  //将ImageView添加到线性布局管理器中



try  {



Thread.sleep(10);  //为了更好地查看效果,这里让线程休眠10毫秒



}  catch  (InterruptedException  e)  {



e.printStackTrace();



}



publishProgress(i);  //触发onProgressUpdate(Progress...)方法更新进度



}



return  ll;



}



/*



*  功能:更新进度



*/



@Override



protected  void  onProgressUpdate  (Integer...  values)  {



setProgress(values[0]  *  2500);  //动态更新最新进度



super.onProgressUpdate(values);



}



/*



*  功能:任务执行后



*/



@Override



protected  void  onPostExecute  (LinearLayout  result)  {



setProgressBarVisibility(false);  //任务执行后隐藏进度条



l.addView(result);  //将水平线性布局管理器添加到布局文件中添加的垂直线性布局管理器中