拖动图片的特效

首届 Google 暑期大学生博客分享大赛——2010 Andriod 篇

      之前用我的MileStone下载安装了Tencent的“QQ浏览器”,觉得其中的常用网址一栏,可以想IPhone一样拖动图片的特效,于是自己想效仿一个。

在Android中可以很轻松的做到这个效果,不过需要一些技巧,包括android.content.Context,android.widget.BaseAdapter,android.widget.ImageView。在Activity中,Content相当与一张Canvas画布,在Layout中布局一个Gallery对象,在通过BaseAdapter容器存放Gallery所需要的图片。

       一、自己编写内部类ImageAdapter继承与BaseAdapter,重写getCount()、getItem(int arg0)、etItemId(int arg0)、getView(int position, View convertView, ViewGroup parent)方法。

       二、导入自己的图片文件作为要显示的图片,在res/drawable文件夹上选择import,导入文件即可,但是在导入之前需要注意的是文件名必须是有小写字母、数字、下划线和小数点组成,否则会出现"res\drawable-hdpi\Document.png: Invalid file name: must contain only [a-z0-9_.]”的错误提示。添加成功之后会自动在R.java中添加相关记录:

public static final class drawable {

public static final int document=0x7f020000;

public static final int email=0x7f020001;

public static final int icon=0x7f020002;

public static final int im=0x7f020003;

public static final int music=0x7f020004;

public static final int vedio=0x7f020005;

}

      三、在内部类ImageAdpter中添加数组,将自己添加的图片资源放入数组内,以备调用

 

private int[] myImageIds =

{

R.drawable.email,

R.drawable.document,

R.drawable.im,

R.drawable.music,

R.drawable.vedio

};

 

 

     四、在getView方法中建立ImageView对象:

 

// 新建对象

ImageView iView
= new ImageView(this.myContext);

iView.setImageResource(myImageIds[position]);

iView.setScaleType(ImageView.ScaleType.FIT_XY);

// 设置ImageView对象的宽度和高度

iView.setLayoutParams(
new Gallery.LayoutParams(128, 128));

 

 

最后的效果图:

 

下载源代码

内部类ImageAdapter的完全代码:

1 public class ImageAdapter extends BaseAdapter{
2
3 private Context myContext = null;
4
5 /*将自己定义的图片存为数组内*/
6 private int[] myImageIds =
7 {
8 R.drawable.document,
9 R.drawable.music,
10 R.drawable.email,
11 R.drawable.im,
12 R.drawable.vedio
13 };
14
15 /**
16 * 构造函数
17 * @param c
18 */
19 public ImageAdapter(Context c){
20 this.myContext = c;
21 }
22 /**
23 * 返回所有一定义的图片总数量
24 */
25 @Override
26 public int getCount() {
27 // TODO Auto-generated method stub
28   return this.myImageIds.length;
29 }
30
31 @Override
32 public Object getItem(int arg0) {
33 // TODO Auto-generated method stub
34   return arg0;
35 }
36
37 @Override
38 public long getItemId(int arg0) {
39 // TODO Auto-generated method stub
40   return arg0;
41 }
42
43 /**
44 * 取得目前将要显示的图片的view
45 * 传入数组ID值使之读取与成像
46 */
47 @Override
48 public View getView(int position, View convertView, ViewGroup parent) {
49 // TODO Auto-generated method stub
50 ImageView iView = new ImageView(this.myContext);
51 iView.setImageResource(myImageIds[position]);
52 iView.setScaleType(ImageView.ScaleType.FIT_XY);
53 iView.setLayoutParams(new Gallery.LayoutParams(128, 128));
54 return iView;
55 }
56
57 }
58

 

 

posted @ 2010-08-18 14:06  一沙鸥  阅读(2515)  评论(4编辑  收藏  举报