拖动图片的特效
首届 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