ViewPager+ImageView 图片滑动预览
来源:互联网 发布:centos 系统版本 编辑:程序博客网 时间:2024/06/05 14:23
项目需求:
1、展示从网上url获取的图片
2、页面既可以左右滑动,也可以依靠向左向右的箭头按钮控制
难点:
1、如果在ViewpagerAdapter里面使用ImageLoader加载ImageView,因为网络请求耗时较长,会造成每张图片都卡顿
解决方案:
1)先将图片都下载下来
List<String> imageUrls = FragmentSetting.imageUrls; len = imageUrls.size(); List<ImageView> lists = new ArrayList<>(); ImageViewFactory factory = new ImageViewFactory(); for (int i = 0;i<len;i++){ lists.add(factory.getImageView(context, imageUrls.get(i))); } ImagePager mypager = new ImagePager(context,lists); imgPager.setAdapter(mypager);
其中:
public class ImageViewFactory { public ImageView getImageView(Context context,String imgUrl){ ImageView imageView = (ImageView) LayoutInflater.from(context).inflate( R.layout.imageview, null); getImageRequest(context,imageView,imgUrl); return imageView; } private void getImageRequest(Context context, final ImageView imageView, String imgUrl) { ImageRequest imReq = new ImageRequest(imgUrl, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap arg0) { imageView.setImageBitmap(arg0); } }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) {// imageView.setImageResource(R.mipmap.default_pic); } } ); RequestQueue queue = RequestManager.getRequestQueue(); queue.add(imReq); queue.start(); }}重写PagerAdapter
package com.chinaso.so.ui.control;import android.content.Context;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import com.android.volley.toolbox.ImageLoader;import com.chinaso.so.R;import java.util.List;/** * Created by chinaso on 2015/11/4. */public class ImagePager extends PagerAdapter { private Context context; private List<ImageView> strDrawables; public ImagePager(Context context, List<ImageView> strDrawables) { this.context=context; this.strDrawables=strDrawables; } @Override public int getCount() { return strDrawables.size(); } @Override public View instantiateItem(ViewGroup container, int position) { ImageView imageView = strDrawables.get(position); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; }}
2、currentItem是有两个改变的原因,一个是button的click事件,一个是需要重写Viewpager的setOnPageChangeListener事件
(1)重写ChangeedListener
imgPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (currentImg == 0) { //如果offsetPixels是0页面也被滑动了,代表在第一页还要往左划 if (positionOffsetPixels == 0 && currentPageScrollStatus == 1) { CoverActivity.this.finish(); } } else if (currentImg == (len - 1)) { //已经在最后一页还想往右划 if (positionOffsetPixels == 0 && currentPageScrollStatus == 2) { Toast.makeText(context, "没有下一张啦", Toast.LENGTH_SHORT).show(); } } } @Override public void onPageSelected(int position) { currentImg = position; } @Override public void onPageScrollStateChanged(int state) { //记录page滑动状态,如果滑动了state就是1 currentPageScrollStatus = state; } });
参数解释:onPageScrollStateChanged(int arg0) ,此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。arg0 ==1表示正在滑动,arg0==2表示滑动完毕了,arg0==0表示什么都没做。当页面开始滑动的时候,三种状态的变化顺序为(1,2,0)。
onPageScrolled(int arg0,float arg1,int arg2) ,当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到调用。其中三个参数的含义分别为:arg0 :当前页面,及你点击滑动的页面。arg1:当前页面偏移的百分比。arg2:当前页面偏移的像素位置。
onPageSelected(int arg0) ,此方法是页面跳转完后得到调用,arg0是你当前选中的页面的position。
(2)重写Click事件
private class RotateOnClickListener implements View.OnClickListener { @Override public void onClick(View view) { if (view != null){ int id = view.getId(); if (id == R.id.point_left){ if (currentImg <= 0) { CoverActivity.this.finish(); } imgPager.setCurrentItem(--currentImg); }else if (id == R.id.point_right){ if (currentImg >= (len-1)) { Toast.makeText(context,"没有下一张啦",Toast.LENGTH_SHORT).show(); }else{ imgPager.setCurrentItem(++currentImg);} } } } }
0 0
- ViewPager+ImageView 图片滑动预览
- 二十四、ViewPager实现图片滑动预览
- Android ViewPager实现图片滑动预览效果
- ViewPager使用 -------滑动图片
- Android-ViewPager滑动图片
- Android ViewPager图片滑动
- Android实现滑动图片(ViewPager)
- viewPager实现图片左右滑动
- Android 图片滑动效果: ViewPager
- ViewPager使图片可滑动
- ViewPager里面ImageView图片切换出现bug
- Android图片轮播 ViewPager ImageView
- ViewPager加ImageView图片浏览中点击ImageView结束查看
- ViewPager加ImageView图片浏览中点击ImageView结束查看
- ViewPager加ImageView图片浏览中点击ImageView结束查看
- viewpager+fragment 做图片预览 OOM
- 用Gallery和ImageView实现图片滑动
- StackView滑动预览图片(LG_stackView)---bug
- android app全屏显示
- 程序员该有的艺术气质—SOLID原则
- 能源企业信息化系统中的典型客户管理数据分析模块展示
- svn日常笔记总结
- 文件的简单加密
- ViewPager+ImageView 图片滑动预览
- 有关vim的使用
- 《第四十七周》
- Pig初识
- 深入理解JVM之五:类文件结构
- VMware PXE Linux 网络启动搭建
- 第三方库总结
- sqlserver 数据分页 多个主键
- jQuery初学知识点总结(二)