`
liveHappy
  • 浏览: 81828 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

android 拖动效果 Gallery 实例

阅读更多
大多数手机上都会有类似的动态效果,因为这样的动画会让人耳目一新。苹果曾经因此吸引了不少手机粉丝。那么在android上同样也可以实现此效果。
Gallery的功能就是用来显示这样的效果。简单说明一下Gallery是什么样的:
假设你放入了10个图片,那么你用Gallery的时候,用此容器来存放你的图片,在手机界面上会把图片显示出来(android的系统中带有自己的Gallery的风格)。那么你在点击后一张图片的时候前一张图片就会往前移动,而你点击的图片就会突出显示。你也可以触摸拖动图片,任意选择你想要的那张图片突出显示。
  不过,通常的Gallery在你指定了10张或者更多的图片时,到了最后一张就不在循环显示了。也就是说,它只能限定显示图片。
  通过一个实例来完成Gallery的用法。
  首先:我们要知道Gallery是显示图片用的,那么就需要指定他的显示布局。
我们需要一个ImageView来完成此布局,而此布局需要继承BaseAdapter,来实现其中的方法来为Gallery实现效果。
我们所有要用到的图片要放在一个int型数组中,然后通过ImageView的setImageResource方法来设置需要显示的图片,然后在把此图片通过ImageView对象显示在手机屏幕上。
ImageAdapter类:

public class ImageAdapter extends BaseAdapter {
        // 用来设置ImageView的风格
	int mGalleryItemBackground;
	private Context context;  
	//图片的资源ID
	private Integer[] mImageIds = {
		R.drawable.img1,	
		R.drawable.img2,	
		R.drawable.img3,	
		R.drawable.img4,	
		R.drawable.img5,	
		R.drawable.img6,	
		R.drawable.img7,	
		R.drawable.img8	
	};
        //构造函数
	public ImageAdapter(Context context) {
		// TODO Auto-generated constructor stub
		this.context = context;
	}
	//返回所有图片的个数
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return mImageIds.length;
	}
        //返回图片在资源的位置
	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return position;
	}
        //返回图片在资源的位置
	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}
        //此方法是最主要的,他设置好的ImageView对象返回给Gallery
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ImageView imageView = new ImageView(context);
                //通过索引获得图片并设置给ImageView
		imageView.setImageResource(mImageIds[position]);
                //设置ImageView的伸缩规格,用了自带的属性值
		imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                //设置布局参数
		imageView.setLayoutParams(new Gallery.LayoutParams(120, 120));
                //设置风格,此风格的配置是在xml中
		imageView.setBackgroundResource(mGalleryItemBackground);
		return imageView;
	}

	public int getmGalleryItemBackground() {
		return mGalleryItemBackground;
	}

	public void setmGalleryItemBackground(int mGalleryItemBackground) {
		this.mGalleryItemBackground = mGalleryItemBackground;
	}

}

上面的代码实现了要用来放置在Gallery中的ImageView对象。其中上面有几个部分要注意:
1.mGalleryItemBackground 此变量是用来设置ImageView的显示风格的,那么它的配置我写在了一个xml中(/valus/attrs.xml):
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<declare-styleable name="Gallery">
		<attr name="android:galleryItemBackground"/>
	</declare-styleable>
</resources>

同时,我在网上看到有人把读取这个的代码
引用
TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);

同时也放在了构造函数中,但是我尝试了去这么做失败了,所以我把此代码提取了出来放在了Activity中设置,那么需要把mGalleryItemBackground 变量在ImageAdapter中放入set()方法。
2.getCount和getView。其中getCount是返回图片总数,但这个总数不能大于图片的实际数(可以小于),否则会抛出越界异常。
而getView是核心,Gallery组件要显示某一个图片时,就会调用getView方法,并将当前的图片索引(position参数)传给该方法,然后返回一个ImageView对象。它不是一下把所有的图片都显示出来,而是即时的显示。
那么在看activity中,在这里就简单了。
Activity01类:
public class Activity01 extends Activity {
    /** Called when the activity is first created. */
	private Gallery myGallery;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myGallery = (Gallery)findViewById(R.id.myGallery);
        //这段代码是杨丰盛老师的《android开发揭秘》中这样写的
        //myGallery.setBackgroundResource(R.drawable.bg0);
        ImageAdapter adapter = new ImageAdapter(this);
        //设置背景风格。Gallery背景风格定义在attrs.xml中
        TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
        adapter.setmGalleryItemBackground(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0));
        myGallery.setAdapter(adapter);
    }
}

main.xml(这里只放入了一个Gallery):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Gallery
	android:id="@+id/myGallery"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"/>
</LinearLayout>

ok,到这里就结束了。我把我做的例子上传供大家下载学习。
ps:用到的图片都是杨老师的例子中的,我手中也有一本他的书,但是书中解说的很少,所以自己总结了一下。
分享到:
评论
4 楼 qxjandyc 2014-04-05  
您好,关于您说的引用
TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);

同时也放在了构造函数中,但是我尝试了去这么做失败了,是因为,没有引用上下文context,所以直接调用是不行的
TypedArray typedArray = context.obtainStyledAttributes(R.styleable.Gallery);
3 楼 lgp0203 2013-10-16  
很好,顶一个
2 楼 zhangxiweicaochen 2012-03-31  
good!!!!!
1 楼 lzyfn 2011-11-24  
好!!!

相关推荐

    android开发实例大全_王东华

    全书分为18章,分别讲解了UI布局实例集锦、控件实例集锦、自动化服务实例集锦、数据存储实例集锦、电话和短信实例集锦、图形图像实例集锦、和网络有关的实例集锦、多媒体实例集锦、Google地图实例集锦、GoogleAPI...

    Android UI控件之Gallery实现拖动式图片浏览效果

    在Android中是通过Gallery来实现拖动效果的。 通过Gallery可以实现各种各样的效果,此篇文章只是简要谈谈他的用法,至于后续的一些效果 有机会的时候做一个整理。  首先看看其简单实现吧!本次实例是通过选取图片...

    Android开发实现Gallery画廊效果的方法

    本文实例讲述了Android开发实现Gallery画廊效果的方法。分享给大家供大家参考,具体如下: 画廊 使用Gallery表示,按水平方向显示内容,并且可以用手指直接拖动图片移动,一般用来浏览图片,被选中的选项位于中间,...

    android开发资料大全

    android用户界面之Gallery教程实例汇总 android用户界面之按钮(Button)教程实例汇 android用户界面之ProgressBar教程实例汇总 android用户界面之WebView教程实例汇总 android用户界面之GridView教程实例汇总 android...

    android开发揭秘PDF

    4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、...

    Android入门到精通源代码.

    5.1.5 切换图片(ImageSwitcher和Gallery) 5.1.6 标签切换(Tab) 5.2 通用XML属性 第6章 Android菜单和布局设计 6.1 菜单(Menu) 6.1.1 上下文菜单(ContextMenu) 6.1.2 选项菜单(OptionsMenu) 6.1.3 基于XML...

    android开发入门与实战(下)

    7.5 Android应用的灵魂——Intent和Activity介绍与实例 7.5.1 实例操作演示 7.5.2 实例编程实现 7.6 用好列表,做好程序——列表(ListView)介绍与实例 7.6.1 实例程序演示 7.6.2 实例编程实现 7.7 友好地互动交流...

    《Android应用开发揭秘》附带光盘代码.

     4.2.15 拖动效果(Gallery)  4.2.16 切换图片(hmgeSwilcher)  4.2.17 网格视图(GridView)  4.2.18 卷轴视图(ScrollView)  4.2.19 进度条(ProgressBar)  4.2.20 拖动条(SeekBar)  4.2.21 状态栏提示...

    Android编程仿Iphone拖动相片特效Gallery的简单应用示例

    主要介绍了Android编程仿Iphone拖动相片特效Gallery的简单应用,结合实例形式分析了Android图形拖动特效的实现步骤与相关操作技巧,需要的朋友可以参考下

    android开发入门与实战(上)

    7.5 Android应用的灵魂——Intent和Activity介绍与实例 7.5.1 实例操作演示 7.5.2 实例编程实现 7.6 用好列表,做好程序——列表(ListView)介绍与实例 7.6.1 实例程序演示 7.6.2 实例编程实现 7.7 友好地互动交流...

    《Google Android开发入门与实战》.pdf

     本书内容上涵盖了用android开发的大部分场景,从android基础介绍、环境搭建、sdk介绍、market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个android平台下的完整综合实例及源代码分析,...

    Android应用开发揭秘pdf高清版

    4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、...

    《Android应用开发揭秘》源码

     4.2.15 拖动效果(Gallery)  4.2.16 切换图片(hmgeSwilcher)  4.2.17 网格视图(GridView)  4.2.18 卷轴视图(ScrollView)  4.2.19 进度条(ProgressBar)  4.2.20 拖动条(SeekBar)  4.2.21 状态栏提示...

    疯狂Android讲义源码

     2.4.12 画廊视图(Gallery)的功能和  用法 107  2.5 对话框 110  2.5.1 使用AlertDialog创建简单  对话框 110  2.5.2 使用AlertDialog创建列表  对话框 112  2.5.3 使用AlertDialog创建自定义  对话框 ...

    Android开发应用实战详解源代码

    7.4 照片拖动效果 7.5 存储卡中的图片 7.6 获取内置媒体文件 7.7 调节音量 7.8 播放mp3资源文件 7.9 录制音频 7.10 实现相机拍照功能 7.10.1 实现原理 7.10.2 编程思想 7.10.3 具体实现 7.11 自制3gp影片播放器 7.12...

    Google.Android开发入门与实战

     《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、环境搭建、SDK介绍、Market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个Android平台下的完整综合...

Global site tag (gtag.js) - Google Analytics