万书网 > 文学作品 > Android从入门到精通 > 第136页

第136页



(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的TextView组件删除,然后在默认添加的线性布局管理器中添加一个ImageView组件,并且设置该组件默认显示的图片,关键代码如下:




android:id="@+id/imageView1"



android:layout_width="wrap_content"



android:layout_height="wrap_content"



android:padding="10dp"



android:src="@drawable/hint"  />

(2)在该MainActivity中,声明一个代表ImageView组件的对象,具体代码如下:

private  ImageView  iv;  //声明ImageView组件的对象

(3)编写getPicture()方法,用于根据给定的网址从网络上获取图片,并根据获取到的图片创建一个Bitmap对象。getPicture()方法的具体代码如下:

/**



*  功能:根据网址获取图片对应的Bitmap对象



*  @param  path



*  @return



*/



public  Bitmap  getPicture(String  path){



Bitmap  bm=null;



try  {



URL  url=new  URL(path);  //创建URL对象



URLConnection  conn=url.openConnection();  //获取URL对象对应的连接



conn.connect();  //打开连接



InputStream  is=conn.getInputStream();  //获取输入流对象



bm=BitmapFactory.decodeStream(is);  //根据输入流对象创建Bitmap对象



}  catch  (MalformedURLException  e1)  {



e1.printStackTrace();  //输出异常信息



}  catch  (IOException  e)  {



e.printStackTrace();  //输出异常信息



}



return  bm;



}

(4)在onCreate()方法中,获取布局管理器中添加的ImageView组件,并创建和开启一个新线程,在创建线程时,需要重写它的run()方法,在重写的run()方法中调用getPicture()方法从网络上获取图片,然后让线程休眠2秒钟,再通过View组件的post()方法发送一个Runnable对象,修改ImageView中显示的图片,具体代码如下:

iv  =  (ImageView)  findViewById(R.id.imageView1);  //获取布局管理器中添加的ImageView



//创建一个新线程,用于从网络上获取图片



new  Thread(new  Runnable()  {



public  void  run()  {



//从网络上获取图片



final  Bitmap  bitmap=getPicture("http://192.168.1.66:8081/test/images/android.png");



try  {



Thread.sleep(2000);  //线程休眠2秒钟



}  catch  (InterruptedException  e)  {



e.printStackTrace();



}



//发送一个Runnable对象



iv.post(new  Runnable()  {



public  void  run()  {



iv.setImageBitmap(bitmap);  //在ImageView中显示从网络上获取到的图片



}



});



}



}).start();  //开启线程

(5)由于在本实例中需要访问网络资源,所以还需要在AndroidManifest.xml文件中指定允许访问网格资源的权限,具体代码如下:



运行本实例,首先显示如图12.6所示的默认图片,几秒钟后,将显示如图12.7所示的从网络中获取的图片。





图12.6 显示默认的图片  图12.7 显示网络图片

12.2.5 范例2:开启新线程实现电子广告牌

例12.5   在Eclipse中创建Android项目,名称为12.5,开启新线程实现电子广告牌。(实例位置:光盘\TM\sl\12\12.5)

(1)修改新建项目的res\layout目录下的布局文件main.xml,在默认添加的TextView组件上方添加一个ImageView组件,用于显示广告图片,并设置垂直线性布局管理器内的组件水平居中显示,具体代码请参见光盘。

(2)打开默认添加的MainActivity,让该类实现Runnable接口,修改后的创建类的代码如下:

public  class  MainActivity  extends  Activity  implements  Runnable  {}

(3)实现Runnable接口中的run()方法,在该方法中,判断当前线程是否被中断,如果没有被中断,则首先产生一个随机数,然后获取一个Message,并将要显示的广告图片的索引值和对应标题保存到该Message中,再发送消息,最后让线程休眠2秒钟,具体代码如下:

@Override



public  void  run()  {



int  index  =  0;



while  (!Thread.currentThread().isInterrupted())  {



index  =  new  Random().nextInt(path.length);  //产生一个随机数



Message  m  =  handler.obtainMessage();  //获取一个Message



m.arg1  =  index;  //保存要显示广告图片的索引值



Bundle  bundle  =  new  Bundle();  //获取Bundle对象



m.what  =  0x101;  //设置消息标识



bundle.putString("title",  title[index]);  //保存标题



m.setData(bundle);  //将Bundle对象保存到Message中



handler.sendMessage(m);  //发送消息



try  {



Thread.sleep(2000);  //线程休眠2秒钟



}  catch  (InterruptedException  e)  {



e.printStackTrace();  //输出异常信息



}



}



}

(4)在该MainActivity中,创建程序中所需的成员变量,具体代码如下: