android 新闻app无限横移,Android ViewPager相册横向移动的实现方法

news/2024/7/8 5:56:57

当我们第一次下载QQ并且打开的时候,会有一个新手引导,引导是几张图片,再加上一些文字说明,向右滑动,直到结束,今天一大早起来研究了一下关于此种效果的实现之ViewPager控件。

下面这个例子将用ViewPager实现横向移动相册,ViewPager有一个对应的PagerAdapter,用于绑定数据;我们需要继承此类并实现自己的功能。

1、首先定义一个显示项所需要使用的数据对象ImageItem

复制代码 代码如下:

public class ImageItem {

private int id;// 资源id

private String name;// 显示的名称

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public ImageItem(int id, String name) {

super();

this.id = id;

this.name = name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

}

2、ViewPager中每一面为一个Item,所以在layout目录下定义一个ViewPager的每一页的Item,名为pageritem.xml

复制代码 代码如下:

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/imgview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:contentDescription="@string/app_name"

android:scaleType="fitXY" />

android:id="@+id/textView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="bottom|center_horizontal" />

3、新建一个java文件,对应ViewPager的每一项Item

复制代码 代码如下:

public class ViewpagerItem extends FrameLayout {

private ImageView imageview;// 显示图片的ImageView

private TextView textview;

private Bitmap bitmap;// 图片对应的Bitmap

private ImageItem imageitem;// 每一个图片项对象

public ViewpagerItem(Context context) {

super(context);

setViews();

}

public ViewpagerItem(Context context, AttributeSet attrs) {

super(context, attrs);

setViews();

}

public void setData(ImageItem item) {// 用ImageItem填充数据

this.imageitem = item;

int resid = item.getId();

String name = item.getName();

imageview.setImageResource(resid);

textview.setText(name);

}

public void reload() {// 重新载入数据

int resid = imageitem.getId();

imageview.setImageResource(resid);

}

public void recycle() {// 回收数据

imageview.setImageBitmap(null);

if (this.bitmap == null || this.bitmap.isRecycled()) {

return;

}

this.bitmap.recycle();

this.bitmap = null;

}

public void setViews() {

LayoutInflater infalter = LayoutInflater.from(getContext());

View view = infalter.inflate(R.layout.pageritem, null);

textview = (TextView) view.findViewById(R.id.textView);

imageview = (ImageView) view.findViewById(R.id.imgview);

addView(view);

}

}

4、新建一个数据填充器PagerItemAdapter,继承自PagerAdapter

复制代码 代码如下:

public class PagerItemAdapter extends PagerAdapter {

private Context context;

private ImageItem[] image;

public PagerItemAdapter(Context context, ImageItem[] image) {

this.context = context;

this.image = image;

hashMap = new HashMap();

}

private HashMap hashMap;// 保存相片的id以及对应的ViewpagerItem

@Override

public int getCount() {

return image.length;

}

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0 == arg1;

}

@Override

public void finishUpdate(ViewGroup container) {

super.finishUpdate(container);

}

@Override// 初始化一个ViewpagerItem,如果已经存在就重新载入,没有的话new一个

public Object instantiateItem(ViewGroup container, int position) {

ViewpagerItem item;

if (hashMap.containsKey(position)) {

item = hashMap.get(position);

item.reload();

} else {

item = new ViewpagerItem(context);

ImageItem itemimg = image[position];

item.setData(itemimg);

hashMap.put(position, item);

((ViewPager) container).addView(item);

}

return item;

}

@Override// 当我们左右滑动图片的时候会将图片回收掉

public void destroyItem(View container, int position, Object object) {

ViewpagerItem item = (ViewpagerItem) object;

item.recycle();

}

}

5、在main.xml文件中添加一个ViewPager控件

复制代码 代码如下:

android:id="@+id/viewpager"

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

6、修改MainActivity如下:

复制代码 代码如下:

public class MainActivity extends Activity {

private final static int RES[] = { R.drawable.p1, R.drawable.p2 };// p1,p2为drawable文件夹下的两张图片

private ViewPager viewpager;

private PagerItemAdapter adapter;

private ImageItem[] item;

private void setView(){

item = new ImageItem[2];

item[0] = new ImageItem(RES[0], "page1");

item[1] = new ImageItem(RES[1], "page2");

viewpager = (ViewPager) findViewById(R.id.viewpager);

adapter = new PagerItemAdapter(getApplicationContext(), item);

viewpager.setAdapter(adapter);

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

setView();

}

}

运行程序,左右滑动屏幕出现如下效果!

a6705cd4f4e1cadcc26d70d0c584459f.png

5c04bd750d29bee754a2d65f8d02bb1c.png

f213502272e583abeef5530fe1923f07.png

时间: 2013-04-15


http://www.niftyadmin.cn/n/3660188.html

相关文章

世界杯历史:1930年---2002年(乌拉圭---韩日)

1930乌拉圭世界杯  1928年的奥运会结束后,国际足联召开代表会议决定举办4年一届的世界足球锦标赛。 1934年意大利世界杯  由于第一届世界杯的成功举办,第二届世界杯在一片热望中如期举行了。 1938年法国世界杯  1938年的世界杯恐怕是气氛最为紧张…

手机android图片上传,android自定义View实现图片上传进度显示(仿手机QQ上传效果)...

首先看下我们想要实现的效果如下图(qq聊天中发送图片时的效果):再看一下我实现的效果:1、效果已经看见了,下面我们来实现它。首先我创建一个android工程ProgressImageView。然后我们重写ImageView控件,创建ProcessImageView类代码…

世界杯比赛播报

10日星期六00:00 德国 VS 哥斯达黎加 4:2 拉姆,6;克洛斯,17,61;弗林斯,87;万乔普,13,73 A慕尼黑103:00波兰 VS 厄瓜多尔 0: 2C.特诺里奥,23: 德尔,79A盖尔森基兴221:00英格兰 VS 巴拉圭B法兰克福36月11日星期日00:00特立尼达和多巴哥 VS 瑞典B多…

android摄像头旋转花屏,Android OpenGL YUV 旋转花屏解决、Camera获取图像

一个自拍app,如何获取我们的surface view的截屏?在Camera的onPreviewFrame回调中(继承的PreviewCallback接口)。我们可以获取到data数组,里面存放着就是实时的图片data数组转文件为null,且转bitmap也为null怎么办?data…

华为为什么以前不用鸿蒙,不用鸿蒙的原因来了:会让华为增长变慢

华为有点实力啊~~~华为有点实力啊~~~前些日子,华为方面发布了国产操作系统“鸿蒙OS”(以下简称鸿蒙系统),当时就有消息称华为Mate30系列手机将会首发鸿蒙系统,但就在16号,华为掌门任正非在接受采访时表示:华为如果使用…

微软美国techED 2006 10 大看点

1. The CTP 1 release of SQL Server Everywhere. 微软的面向移动的数据库技术测试版本.2. The Beta 2 drop of WinFS. 微软新一代文件系统,原本将作为Vista和longhorn的一部分发布。但据最新消息,Windows Server chief Bob Muglia 表示,它可能会作为微软…

TechEd 2006 微软揭开SharePoint 2007 新特性LOBi

6月12日,TechEd 2006 大会上,微软官方表示,Office 小组正在实现一个目标,提供一个Office Business Application Services(OBA) 和 Line of Business Interoperability (LOBi) 技术框架,将企业的商业环境整合…

android 禁止媒体扫描,Android通过.nomedia文件禁止多媒体库扫描指定文件夹下的多媒体文件...

Android默认情况下会将每个多媒体文件的信息保存在一个数据库中(在系统收到某些消息,比如开机、插拔SD卡、设备连接上电脑这种涉及到可能更改文件系统内容的情况下,会触发系统扫描文件系统中的多媒体文件变化情况并同步到媒体数据库中;或者应…