仿微信朋友圈图片浏览器
来源:互联网 发布:废除 网络中立 知乎 编辑:程序博客网 时间:2024/04/28 22:02
最近在APP中实现了“仿微信朋友圈图片浏览”的效果,因为是第一次做,所以也查找了一些资料,最后使用自定义ViewPager (HackyViewPager),这里写篇博客记录一下,记录一下,也希望帮你解决一些难题。好了不多少,直接上代码。
首先自定义ViewPager (HackyViewPager):
/** * Created by 李金伟 on 2017/4/5. * 仿微信朋友圈图片浏览;自定义viewpager */public class HackyViewPager extends ViewPager { private boolean isLocked; public HackyViewPager(Context context) { super(context); isLocked = false; } public HackyViewPager(Context context, AttributeSet attrs) { super(context, attrs); isLocked = false; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (!isLocked) { try { return super.onInterceptTouchEvent(ev); } catch (IllegalArgumentException e) { e.printStackTrace(); return false; } } return false; } @Override public boolean onTouchEvent(MotionEvent event) { return !isLocked && super.onTouchEvent(event); } public void toggleLock() { isLocked = !isLocked; } public void setLocked(boolean isLocked) { this.isLocked = isLocked; } public boolean isLocked() { return isLocked; }}
用ShowPictureActivity展示图片
/** * Created by 李金伟 on 2017/4/5. * 仿微信朋友圈图片浏览 */public class ShowPictureActivity extends FragmentActivity { private HackyViewPager pager; private ImageViewPagerAdapter adapter; private ArrayList<String> imagelist; private LinearLayout ll_point_group; private int lastPosition; private int position; private static final String STATE_POSITION = "STATE_POSITION"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_showbigpicture); initView(); initData(); initListener(); if (savedInstanceState != null) { position = savedInstanceState.getInt(STATE_POSITION); } pager.setCurrentItem(position); } @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(STATE_POSITION, pager.getCurrentItem()); } private void initView() { // 接收传过来的图片集合,position为第几个,默认为0,也可以认为点击的第几张图片 imagelist = getIntent().getStringArrayListExtra("imagelist"); position = getIntent().getIntExtra("position", 0); pager = (HackyViewPager) findViewById(R.id.pager); ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group); } private void initData() { if (imagelist.size() > 1){ for (int i = 0; i < imagelist.size(); i++) { // 动态添加指示点 ImageView point = new ImageView(this); point.setBackgroundResource(R.drawable.point_bg); // 让第一个是黄点,其他的是白点 if (i == position) { point.setEnabled(true); } else { point.setEnabled(false); } // 布局是一个类,子View也是一个类,布局参数也是一个独立的类 // 任何一个布局,都有一个对应的静态类:布局参数 // 当布局添加子view时,布局参数一定要和布局的类型保持一致 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, -2); layoutParams.leftMargin = 15; // 左边,15个象素的边距 ll_point_group.addView(point, layoutParams); } } adapter = new ImageViewPagerAdapter(getSupportFragmentManager(), imagelist, position); pager.setAdapter(adapter); } private void initListener() { pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { position = position % imagelist.size(); ll_point_group.getChildAt(lastPosition).setEnabled(false); ll_point_group.getChildAt(position).setEnabled(true); lastPosition = position; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); }}
展示布局文件代码activity_showbigpicture.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:backgroundTint="@color/black" android:background="@color/colorWhite"> <包名.view.browser9img.HackyViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBottom="@id/pager" android:layout_marginBottom="25dp" android:gravity="center_horizontal" android:orientation="vertical" android:padding="5dp"> <TextView android:layout_width="wrap_content" android:text="" android:layout_height="wrap_content" /> <LinearLayout android:id="@+id/ll_point_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> </LinearLayout> </LinearLayout></RelativeLayout>
ImageViewPagerAdapter类:
/** * Created by 李金伟 on 2017/4/5. */public class ImageViewPagerAdapter extends FragmentPagerAdapter { private static final String IMAGE_URL = "image"; List<String> mDatas; int mposition; public ImageViewPagerAdapter(FragmentManager fm, List data, int position) { super(fm); this.mDatas = data; this.mposition = position; } @Override public Fragment getItem(int position) { String url = mDatas.get(position); Fragment fragment = ImageFragment.newInstance(url); return fragment; } @Override public int getCount() { return mDatas.size(); }// @Override// public Object instantiateItem(ViewGroup container, int position) {// return super.instantiateItem(container, position);// }}ImageFragment类:
/** * Created by 李金伟 on 2017/4/5. */public class ImageFragment extends Fragment { private static final String IMAGE_URL = "image"; PhotoView image; private String imageUrl; public ImageFragment() { // Required empty public constructor } public static ImageFragment newInstance(String param1) { ImageFragment fragment = new ImageFragment(); Bundle args = new Bundle(); args.putString(IMAGE_URL, param1); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { imageUrl = getArguments().getString(IMAGE_URL); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_image, container, false); image = (PhotoView) view.findViewById(R.id.image); image.setOnPhotoTapListener(new PhotoTapListener()); Glide.with(getContext()).load(imageUrl).into(image); return view; } @Override public void onAttach(Context context) { super.onAttach(context); } @Override public void onDetach() { super.onDetach(); } @Override public void onDestroyView() { super.onDestroyView(); } private class PhotoTapListener implements PhotoViewAttacher.OnPhotoTapListener { @Override public void onPhotoTap(View view, float v, float v1) { getActivity().finish(); } @Override public void onOutsidePhotoTap() { getActivity().finish(); } }}
最后我们来看一下效果:
这里我只传入了三张图片,如果你需要还可以再多加几张。
参考文献:http://blog.csdn.net/allen315410/article/details/40264551/
好了!仿微信朋友圈图片浏览器就这样实现了,是不是对你有帮助!!不要忘了“顶”一下哦!!!
阅读全文
1 0
- 仿微信朋友圈图片浏览器
- 仿微信朋友圈发图片
- 仿微信朋友圈选择图片
- Swift之微信朋友圈图片浏览器
- Android仿微信朋友圈图片浏览器(支持图片手势缩放,拖动)
- 仿微信朋友圈点击图片变暗
- 仿微信朋友圈图片查看器
- Android仿微信朋友圈上传图片
- Android仿微信朋友圈图片查看器
- Android仿微信朋友圈图片查看器
- Android仿微信朋友圈图片查看器
- Android仿微信朋友圈图片查看器
- Android仿微信朋友圈发图片和文字
- 仿微信朋友圈图片按下效果
- HttpUrlConnection缓存,仿微信朋友圈图片缓存效果
- Android仿微信朋友圈图片查看器
- Android仿微信朋友圈图片查看器
- 仿微信朋友圈图片点击放大效果
- Collections.sort() 排序算法 源码简介
- ubuntu 16.04安装 navicat
- 遍历Map的四种方法
- Eventbus3架构概要分析
- 终端提交代码到码云
- 仿微信朋友圈图片浏览器
- C语言之球体自由落体和猴子吃桃算法
- SOUI界面库 第1讲-开发环境搭建
- Hive和MySQL分组排序取前n条记录
- redis安装和java连接redis使用
- python爬虫爬取斗图网上图片
- Unity5 刚体添加力
- 进程同步-死锁示例
- linux系统使用Rsync+sersync实现文件实时同步