ImagePagerActivity简单的仿微信图片浏览
来源:互联网 发布:联想电脑装mac系统 编辑:程序博客网 时间:2024/05/28 15:02
自定义一个Activity,封装了ViewPager和LinearLayout,实现简单的图片浏览器,和上个自定义的九宫图控件一样,使用非常简单,只需要传入图片的url数组就可以了。当然图片加载使用的Glide,需要导入一个Glide。
dependencies { compile 'com.github.bumptech.glide:glide:3.7.0'}
直接把Activity源码贴出,很简单的逻辑。
public class ImagePagerActivity extends Activity { public static final String INTENT_IMGURLS = "imgurls"; public static final String INTENT_POSITION = "position"; public static final String INTENT_IMAGESIZE = "imagesize"; private List<View> guideViewList = new ArrayList<View>(); private LinearLayout guideGroup; public ImageSize imageSize; private int startPos; private ArrayList<String> imgUrls; public static void startImagePagerActivity(Context context, List<String> imgUrls, int position, ImageSize imageSize) { Intent intent = new Intent(context, ImagePagerActivity.class); intent.putStringArrayListExtra(INTENT_IMGURLS, new ArrayList<String>(imgUrls)); intent.putExtra(INTENT_POSITION, position); intent.putExtra(INTENT_IMAGESIZE, imageSize); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_imagepager); ViewPager viewPager = (ViewPager) findViewById(R.id.pager); guideGroup = (LinearLayout) findViewById(R.id.guideGroup); getIntentData(); ImageAdapter mAdapter = new ImageAdapter(this); mAdapter.setDatas(imgUrls); mAdapter.setImageSize(imageSize); viewPager.setAdapter(mAdapter); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { for (int i = 0; i < guideViewList.size(); i++) { guideViewList.get(i).setSelected(i == position ? true : false); } } @Override public void onPageScrollStateChanged(int state) { } }); viewPager.setCurrentItem(startPos); addGuideView(guideGroup, startPos, imgUrls); } private void getIntentData() { startPos = getIntent().getIntExtra(INTENT_POSITION, 0); imgUrls = getIntent().getStringArrayListExtra(INTENT_IMGURLS); imageSize = (ImageSize) getIntent().getSerializableExtra(INTENT_IMAGESIZE); } private void addGuideView(LinearLayout guideGroup, int startPos, ArrayList<String> imgUrls) { if (imgUrls != null && imgUrls.size() > 0) { guideViewList.clear(); for (int i = 0; i < imgUrls.size(); i++) { View view = new View(this); view.setBackgroundResource(R.drawable.selector_guide_bg); view.setSelected(i == startPos ? true : false); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(getResources() .getDimensionPixelSize(R.dimen.gudieview_width), getResources().getDimensionPixelSize(R.dimen .gudieview_heigh)); layoutParams.setMargins(10, 0, 0, 0); guideGroup.addView(view, layoutParams); guideViewList.add(view); } } } @Override public boolean dispatchTouchEvent(MotionEvent ev) { try { return super.dispatchTouchEvent(ev); } catch (Exception e) { e.printStackTrace(); } return false; } private static class ImageAdapter extends PagerAdapter { private List<String> datas = new ArrayList<String>(); private LayoutInflater inflater; private Context context; private ImageSize imageSize; private ImageView smallImageView = null; public void setDatas(List<String> datas) { if (datas != null) this.datas = datas; } public void setImageSize(ImageSize imageSize) { this.imageSize = imageSize; } public ImageAdapter(Context context) { this.context = context; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { if (datas == null) return 0; return datas.size(); } @Override public Object instantiateItem(ViewGroup container, final int position) { View view = inflater.inflate(R.layout.item_pager_image, container, false); if (view != null) { final ImageView imageView = (ImageView) view.findViewById(R.id.image); if (imageSize != null) { //预览imageView smallImageView = new ImageView(context); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(imageSize.getWidth(), imageSize.getHeight()); layoutParams.gravity = Gravity.CENTER; smallImageView.setLayoutParams(layoutParams); smallImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); ((FrameLayout) view).addView(smallImageView); } //loading final ProgressBar loading = new ProgressBar(context); FrameLayout.LayoutParams loadingLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams .WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); loadingLayoutParams.gravity = Gravity.CENTER; loading.setLayoutParams(loadingLayoutParams); ((FrameLayout) view).addView(loading); final String imgurl = datas.get(position); Glide.with(context).load(imgurl).diskCacheStrategy(DiskCacheStrategy.ALL)//缓存多个尺寸 .thumbnail(0.1f)//先显示缩略图 缩略图为原图的1/10 .error(R.drawable.ic_launcher).into(new GlideDrawableImageViewTarget(imageView) { @Override public void onLoadStarted(Drawable placeholder) { super.onLoadStarted(placeholder); /* if(smallImageView!=null){ smallImageView.setVisibility(View.VISIBLE); Glide.with(context).load(imgurl).into(smallImageView); }*/ loading.setVisibility(View.VISIBLE); } @Override public void onLoadFailed(Exception e, Drawable errorDrawable) { super.onLoadFailed(e, errorDrawable); /*if(smallImageView!=null){ smallImageView.setVisibility(View.GONE); }*/ loading.setVisibility(View.GONE); } @Override public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> animation) { super.onResourceReady(resource, animation); loading.setVisibility(View.GONE); /*if(smallImageView!=null){ smallImageView.setVisibility(View.GONE); }*/ } }); container.addView(view, 0); } return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public boolean isViewFromObject(View view, Object object) { return view.equals(object); } @Override public void restoreState(Parcelable state, ClassLoader loader) { } @Override public Parcelable saveState() { return null; } } @Override protected void onDestroy() { guideViewList.clear(); super.onDestroy(); } public static class ImageSize implements Serializable { private int width; private int height; public ImageSize(int width, int height) { this.width = width; this.height = height; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } }}同样也只做使用示例,详细逻辑可以自己理一理,不难。先有数据源,
List<String>tableImgs= new ArrayList<>(); tableImgs.add("http://p3.so.qhmsg.com/bdr/_240_/t01530591c4a0e6c033.jpg"); tableImgs.add("http://p2.so.qhmsg.com/bdr/_240_/t01ab43c649e752002c.jpg"); tableImgs.add("http://p2.so.qhmsg.com/bdr/_240_/t01dce1c2b41d8e272c.jpg"); tableImgs.add("http://p1.so.qhmsg.com/bdr/_240_/t01974c03c076598946.jpg"); tableImgs.add("http://p0.so.qhmsg.com/bdr/_240_/t0123c14f8d0d2be925.jpg"); tableImgs.add("http://p1.so.qhmsg.com/bdr/_240_/t01938dc3846fae8de1.jpg");
启动Activity
ImagePagerActivity.startImagePagerActivity(MyPatientDetailActivity.this, tableImgs, position, new ImagePagerActivity.ImageSize(view.getMeasuredWidth(), view.getMeasuredHeight()));这里的position是你跳转过去显示的数据源第几张图
如果想要设置点击事件可以到ImagePagerActivity中去添加,这里就不单独提出来了。
具体使用参照:https://github.com/SingleShu/ImageActivityWX
1 0
- ImagePagerActivity简单的仿微信图片浏览
- GridView的图片的简单浏览
- 一个简单的android图片浏览程序
- 一个简单的android图片浏览程序
- WPF中简单的图片浏览功能
- 一个简单的 android 图片浏览程序
- 【Android开发学习】简单的图片浏览
- 一个简单的JS图片浏览功能
- 简单图片浏览
- gentoo设置最简单的截图和图片浏览功能
- ISO开发基础—简单的图片浏览app
- 在开发中图片浏览遇到的一些简单问题
- 新手学习opencv三:最最简单的图片浏览
- java中一个简单的Applet(图片浏览…
- SDPhotoBrowser 非常简单易用的图片浏览
- javascript的图片浏览
- 图片浏览的ScrollView
- 图片的浏览,删除
- 数组去重函数
- 第三条:枚举类型强化Singleton属性
- Official Program for CVPR 2015
- raport-3
- Freeline - Android平台上的秒级编译方案
- ImagePagerActivity简单的仿微信图片浏览
- 图片翻转
- 弹层的显示与隐藏
- 关于Android硬件加速
- Bitmap处理的一些方法
- GANs学习系列(4):对抗样本和对抗网络
- 初学Java编译和执行容易犯的错误
- 关于分布式一致性的探究
- 12、享元模式(Flyweight)