zoukankan      html  css  js  c++  java
  • Android使用ViewPager+PhotoView实现图片查看器

    可实现功能效果说明:

      可实现多张图片点击放大,手指控制,左右滑动,多张图片点击任意位置定位显示任意位置图片;无动画,可自己加

    效果图:

                               

    核心代码:

    viewpager:

    public class PhotoViewPager extends ViewPager {
        public PhotoViewPager(Context context) {
            super(context);
        }
    
        public PhotoViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            try {
                return super.onInterceptTouchEvent(ev);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
                return false;
            }
        }
    }

    adapter:

    public class MyImageAdapter extends PagerAdapter {
        public static final String TAG = MyImageAdapter.class.getSimpleName();
        private List<String> imageUrls;
        private AppCompatActivity activity;
    
        public MyImageAdapter(List<String> imageUrls, AppCompatActivity activity) {
            this.imageUrls = imageUrls;
            this.activity = activity;
        }
    
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            String url = imageUrls.get(position);
            PhotoView photoView = new PhotoView(activity);
            Picasso.with(activity)
                    .load(url)
                    .into(photoView);
            container.addView(photoView);
            photoView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.d(TAG, "onClick: ");
                    activity.finish();
                }
            });
            return photoView;
        }
    
        @Override
        public int getCount() {
            return imageUrls != null ? imageUrls.size() : 0;
        }
    
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    
        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }
    }

    photoViewActivity

    public class PhotoViewActivity extends AppCompatActivity implements View.OnClickListener {
    
        public static final String TAG = PhotoViewActivity.class.getSimpleName();
        private PhotoViewPager mViewPager;
        private int currentPosition;
        private MyImageAdapter adapter;
        private TextView mTvImageCount;
        private TextView mTvSaveImage;
        private List<String> Urls;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_photo_view);
            initView();
            initData();
        }
    
        private void initView() {
            mViewPager = (PhotoViewPager) findViewById(R.id.view_pager_photo);
            mTvImageCount = (TextView) findViewById(R.id.tv_image_count);
            mTvSaveImage = (TextView) findViewById(R.id.tv_save_image_photo);
            mTvSaveImage.setOnClickListener(this);
    
        }
    
        private void initData() {
    
            Intent intent = getIntent();
            currentPosition = intent.getIntExtra("currentPosition", 0);
            HomeQuestionListModel.DataBeanX DataBean = ((HomeQuestionListModel.DataBeanX) intent.getSerializableExtra("questionlistdataBean"));
            Urls = DataBean.getAttach().getImage().getOri();
            
            adapter = new MyImageAdapter(Urls, this);
            mViewPager.setAdapter(adapter);
            mViewPager.setCurrentItem(currentPosition, false);
            mTvImageCount.setText(currentPosition+1 + "/" + Urls.size());
            mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    super.onPageSelected(position);
                    currentPosition = position;
                    mTvImageCount.setText(currentPosition + 1 + "/" + Urls.size());
                }
            });
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.tv_save_image_photo:
              //save image 
                    break;
            }
        }
    }

    图片列表页面跳转:

    private void statPhotoViewActivity(int position) {
            Intent intent = new Intent(this, PhotoViewActivity.class);
            Bundle bundle = new Bundle();
            bundle.putSerializable("dataBean", mData);
            intent.putExtras(bundle);
            intent.putExtra("currentPosition", position);
            startActivity(intent);
        }

    TitleLayout——一个Android轻松实现通用、标准、支持沉浸式状态栏的标题栏库

  • 相关阅读:
    框架,样式表的一些认解,今天这节可有点不在状态,正在规划学习流程,让自己更快的提升起来。看着其他小伙伴都太厉害啦。努力!0909上
    表单元素的了解和表单元素分类,代码的认解。 0908下
    表格标题——简单表格的理解与认识 0906下
    HDU 1024 DP Max Sum Plus Plus
    zoj 1670 Jewels from Heaven
    BestCoder Round #68 (div.2) 1002 tree
    POJ 2986 A Triangle and a Circle 圆与三角形的公共面积
    609C Load Balancing
    609B Load Balancing
    codeforce 609A
  • 原文地址:https://www.cnblogs.com/shen-hua/p/6634440.html
Copyright © 2011-2022 走看看