【Android】 Viewpager+Fragment实现滑动图片的动态加载
来源:互联网 发布:淘宝店铺冻结能退货吗 编辑:程序博客网 时间:2024/05/16 04:25
实现一个多图片的滑动
利用viewpager和fragment实现
在viewpager里的每一个view放入一个fragment,fragment里放一个imageview
fragment的数量不确定,是动态加载的,每次刷新需要重新加载一个viewpager
需要三个部分
一、配置文件
main.xml里加入Viewpager控件(android3以下好像要导入包)
<android.support.v4.view.ViewPagerandroid:id="@+id/myViewPager"android:layout="match_parent"android:layout="match_parent" />
</pre><span style="font-family: 'Microsoft YaHei'; font-size: 14px;"></span><p></p><p><span style="font-family:Microsoft YaHei; font-size:14px">自定义一个page.xml(加载的时候使用这个)</span></p><p></p><pre name="code" class="html"><ImageView<span style="white-space:pre"></span>android:id="@+id/myImageView"<span style="white-space:pre"></span>android:layout="match_parent"<span style="white-space:pre"></span>android:layout="match_parent"<span style="white-space:pre"></span>android:scaleType="centercrop" <!-- 图片显示在父类中心且自动缩放 --> />
二、碎片
从Fragment继承
fragment的生命流程和查资料得到的有些不太一样,在创建的时候Override加个log打印就知道了
1、初始化fragment对象并传入需要的内容
public static nowFragment newInstance(int pictureSeq, int nowRound, int nowTarget){nowFragment adatperFragment = new nowFragment();// 利用bundle传值Bundle bundle = new Bundle();bundle.putInt("pictureseq", pictureSeq);bundle.putInt("nowround", nowRound);bundle.putInt("nowtarget", nowTarget);adatperFragment.setArguments(bundle);return adatperFragment}
2、在onCreateView的时候获取view
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){<span style="white-space:pre"></span>view = inflater.inflate(R.layout.mypage,null);<span style="white-space:pre"></span>return view;}
3、在onActivity设置这个fragment里的图片
@Override
public void onActivityCreated(Bundle bundle){<span style="white-space:pre"></span>super.onActivityCreated(bundle);<span style="white-space:pre"></span>imageView = (ImageView) view.findViewById(R.id,myImageView);<span style="white-space:pre"></span>Integer round = getArguments().getInt("nowround");<span style="white-space:pre"></span>Integer target = getArguments().getInt("nowtarget");<span style="white-space:pre"></span>Integer seq = getArguments().getInt("pictureseq");<span style="white-space:pre"></span>// 用自定义的方法设置imageView的图片,这里用了一个BitmapFactory从本地的jpg文件中decode<span style="white-space:pre"></span>bm = BitmapFactory.decodeFile(commonpath + target.toString() + "/" + round.toString() + "/" + seq.toString() +".jpg");<span style="white-space:pre"></span>imageView.setImageView(bm);}
三、适配器
好像可以继承两种,FragmentPagerAdapter和FragmentStatePagerAdapter,后者更加适合动态加载
两者都实现了针对fragment的方法,不需要重写insatntiateItem了
需要重写的地方参考里面写的很清楚
最后主Activity里加个就行了
我是加在一个refreshMyViewPager方法里的
private void refreshMyViewPager(){<span style="white-space:pre"></span>ArrayList<nowFragment> list = new ArrayList<nowFragment>();<span style="white-space:pre"></span>for(int i = 0; i < pictureNum; i++){<span style="white-space:pre"></span>list.add(nowFragment.newInstance(i+1, nowRound, nowTarget));<span style="white-space:pre"></span>}<span style="white-space:pre"></span>adapter = new myViewPagerAdapter(getSupportFragmentManager(), list);<span style="white-space:pre"></span>nowViewPager.setAdapter(adapter);}
此外,如果图片多的话会报out of memory异常,这是因为每个Fragment里都加载了bitmap,虽然FragmentStatePagerAdapter只会加载当前View的前后各一张也就是共三张,剩下的Fragment都会被Destroy,但是bm需要java自己的回收机制调用recycle去回收,没那么快,所以在fragment那个里面重新onDestroyView直接把bm给recycle应该就行了
@Overridepublic void onDestroyView(){if(null != bm){bm.recycle();}Log.i(TAG, "destroy view of " + num.toString());super.onDestroyView();}
参考:http://blog.csdn.net/siyehuazhilian/article/details/26384021
http://blog.csdn.net/forever_crying/article/details/8238863/
- 【Android】 Viewpager+Fragment实现滑动图片的动态加载
- Android viewpager+fragment实现动态加载碎片(fragment重复使用)
- viewpager+fragment嵌套viewpager图片广告导致广告图片不能滑动的问题用LinearLayout实现
- Android实现滑动图片(ViewPager)
- android viewpager和fragment相结合,实现菜单的滑动效果
- 用viewpager实现网络图片的加载并滑动
- ViewPager+Fragment 的左右滑动,如何实现Fragment 的懒加载
- Android Fragment+ViewPager实现循环滑动
- Android ViewPager+Fragment实现首页滑动翻页
- Android ViewPager + Fragment 实现滑动标签效果
- Android之实现ViewPager+Fragment左右滑动
- android 使用Fragment实现ViewPager滑动
- 【Android】viewpager+fragment+tablayout实现滑动菜单栏
- Android ViewPager+Fragment(碎片)实现页面滑动
- Android ViewPager动态加载数据的实现
- ViewPager和Fragment结合,利用(HorizontalScrollView)实现指示器与ViewPager同时滑动的动态效果
- viewpager+fragment来回滑动fragment重新加载的简单解决办法
- 使用Fragment实现的滑动组件ViewPager
- LeetCode N-Queens II
- 关于cocos2dx RenderTexture的newImage为空
- 酷宝童车书城推荐金融一骗千金(史上十大金融欺诈案)
- android socket通信(下)
- Whois网络注册信息探测
- 【Android】 Viewpager+Fragment实现滑动图片的动态加载
- Concurrent vs serial queues in GCD
- LCD1602.c
- 基于XMPP协议的Android即时通信系
- keyBoard组件
- C语言文件操作函数大全(超详细)
- Eclipse 源码.class file 出现乱码,解决办法之一
- Android基于XMPP Smack openfire 开发的聊天室(一)【会议服务、聊天室列表、加入】
- map 小用法