简述如何嵌套使用Viewpager,点击图片放大查看图片,并且使用PhotoView进行图片处理

我们对于ViewPager都不陌生,我们可以用它来实现图片的轮播等功能,今天我把图片的轮播加上了点击图片查看图片,并且使用PhotoView放大缩小图片避免图片失贞等功能。

首先我们导入PhotoView的jar包;;

1.我们在主布局中很简单就是一个viewpager控件;;

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="400dp"
    android:layout_height="400dp">
<span style="white-space:pre">	</span>
2.找三张图片放在assets文件中(assets自己创建,也可快捷创建:右击项目--new--Folder--Assets Folder即可创建)

3.写了三个类,首先是MainActivity类,存放图片资源代码如下:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到viewpager控件
        viewPager = (ViewPager) findViewById(R.id.viewpager);

        try {
            //实例集合
            list=new ArrayList<View>();
            //我存放的三张图片的name,得到一个流
            InputStream a = getAssets().open("a.jpg");
            InputStream b = getAssets().open("b.jpg");
            InputStream c = getAssets().open("c.jpg");
            //转化成bitmap
            bitmapa = BitmapFactory.decodeStream(a);
            bitmapb = BitmapFactory.decodeStream(b);
            bitmapc = BitmapFactory.decodeStream(c);


        } catch (IOException e) {
            e.printStackTrace();
        }
        //new 三个Imageview  分别设置图片
        ImageView ima = new ImageView(MainActivity.this);
        ima.setImageBitmap(bitmapa);
        ImageView imb = new ImageView(MainActivity.this);
        imb.setImageBitmap(bitmapb);
        ImageView imc = new ImageView(MainActivity.this);
        imc.setImageBitmap(bitmapc);
        //添加到list集合中
        list.add(ima);
        list.add(imb);
        list.add(imc);
        //设置适配器
        MyAdapter adapter = new MyAdapter(getApplicationContext(), list);
        viewPager.setAdapter(adapter);
        //设置一个标志,可以左右滑动
        viewPager.setCurrentItem(Integer.MAX_VALUE / 2);

    }
下面是Adapter类:

public class MyAdapter extends PagerAdapter {
    private Context context;
    private ArrayList<View> list = new ArrayList<View>();

    public MyAdapter(Context context, ArrayList<View> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, final int position) {
        //获取父容器,判断是否为空,这里不能直接使用container,因为有可能并没有这个控件,所以我们直接用它的子控件获取父容器
        //不为空的话就移除
        if (list.get(position % list.size()).getParent() != null) {
            ((ViewPager) (list.get(position % list.size()).getParent())).removeView(list.get(position % list.size()));
        }
                            //下面是两种判断方法,看点击的是那张图片,用哪一种都可以
//        if (position%list.size()==0||position%list.size()==1||position%list.size()==2){
//            list.get(position % list.size()).setOnClickListener(new View.OnClickListener() {
//                @Override
//                public void onClick(View view) {
//                    Intent intent =new Intent(context,PotosViewText.class);
//                    if (position % list.size()==0){
//                        intent.putExtra("name","a.jpg");
//                    }else  if (position % list.size()==1){
//                        intent.putExtra("name","b.jpg");
//                    }
//                    else {
//                        intent.putExtra("name", "c.jpg");
//                    }
//                    //加一个标志,在适配器里跳转需要加标志
//                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                      //在适配器中启动意图,需要用context去启动
//                    context.startActivity(intent);
//                }
//            });
//        }
        final Intent intent = new Intent(context, PotosViewText.class);
        switch (position % list.size()) {
            case 0:
                list.get(0).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        intent.putExtra("name", "a.jpg");
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(intent);

                    }
                });
                break;
            case 1:
                list.get(1).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        intent.putExtra("name", "b.jpg");
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(intent);

                    }
                });
                break;
            case 2:
                list.get(2).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        intent.putExtra("name", "c.jpg");
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(intent);

                    }

                });
                break;
        }
        //添加视图
        container.addView(list.get(position % list.size()));
        return list.get(position % list.size());
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {

    }
}
下面是 工具

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.potos_dmeo);

        imageView = (ImageView) findViewById(R.id.imgeview);
        Intent intent = getIntent();
        if (intent == null) {
            return;
        }
        //拿到字符串
        String name = intent.getStringExtra("name");
        try {
            //得到这个流
            open = getAssets().open(name);
            //转换成bitmap
            bitmap = BitmapFactory.decodeStream(open);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //imageView.setImageBitmap(bitmap);
        PhotoViewAttacher attacher = new PhotoViewAttacher(imageView);
        dispPhotos(bitmap,open);
    }
    //下面是一个方法。通过PhotosView进行了图片处理
    private void dispPhotos(Bitmap bt,InputStream is) {
        bt = BitmapFactory.decodeStream(is);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        float Imagewidth = bitmap.getWidth();
        float Imageheight = bitmap.getHeight();
        WindowManager manager = getWindowManager();
        Display display = manager.getDefaultDisplay();
        float displaywidth = display.getWidth();
        //拿到一个缩放比
        float v = displaywidth / Imagewidth;
        if (v == 0) {
            v = 1;
        }
        float v1 = Imageheight * v;
        LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams((int) displaywidth, (int) v1);
        imageView.setLayoutParams(layout);
        imageView.setImageBitmap(bt);

    }


}
这样就完成了简单的viewpager轮播图片点击进行图片的查看以及使用photosview进行图片处理避免失贞,上面代码中都有详细注释,不懂得可以下面留言我会回复,不喜勿喷~~~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值