多图放大滚动展示


activity 接收2个参数num(照片数量)和bundle bundle存储List<logImageMode>类型的modelImageList
public class PhotoShowActivity extends AppCompatActivity {

    @InjectView(R.id.viewpager)
    ViewPager viewPager;

    @InjectView(R.id.dotcontaint)
    LinearLayout dotcontaint;

    private Intent intent;
    private Bundle bundle;
    private int getNum;
    private List<logImageMode> modelImageList;
    private ArrayList<View> viewList = new ArrayList<>();
    private List<Bitmap> bitmaps = new ArrayList<>();
    ArrayList<View> dots = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_photo_show);
        ButterKnife.inject(this);
        init();
    }


    private void init() {
        intent = getIntent();
        bundle = intent.getExtras();
        getNum = intent.getIntExtra("num", 0);
        modelImageList = (List<logImageMode>) bundle.getSerializable("modelImageList");
        initView();
    }

    private void initView() {
        new GetShowBitmap().start();
        getDotList(modelImageList.size());
        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 < viewList.size(); i++) {
                    dots.get(i).setBackgroundResource(R.drawable.dot_nomal);//设置上次选中的圆点为不选中
                }
                dots.get(position % viewList.size()).setBackgroundResource(R.drawable.dot_focus);//设置当前选中的圆点为选中
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    private void getDotList(int length) {
        // TODO Auto-generated method stub
        //循环图片数组,创建对应数量的dot
        for (int i = 0; i < length; i++) {
            View view = LayoutInflater.from(this).inflate(R.layout.dot_layout, null);//加载布局
            View dot = view.findViewById(R.id.dotView);//得到布局中的dot点组件
            //收集dot
            dots.add(dot);
            //把布局添加到线性布局
            dotcontaint.addView(view);
        }
    }

    private class GetShowBitmap extends Thread {
        @Override
        public void run() {
            super.run();
            List<Bitmap> lists = new ArrayList<>();
            for (int i = 0; i < modelImageList.size(); i++) {
                Bitmap tempBitmap = null;
                try {
                    tempBitmap = Picasso.with(getBaseContext())
                            .load(AddressManager.getImgHost() + modelImageList.get(i).getFilePath())
                            .resize(getWidth(), getHeight())
                            //.memoryPolicy(MemoryPolicy.NO_CACHE)
                            //.networkPolicy(NetworkPolicy.NO_CACHE)
                            .get();
                    lists.add(tempBitmap);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            Message message = new Message();
            message.obj = lists;
            handler.sendMessage(message);
        }
    }

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            bitmaps = (List<Bitmap>) msg.obj;
            for (int i = 0; i < bitmaps.size(); i++) {
                ImageView imageView = new ImageView(PhotoShowActivity.this);
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                imageView.setImageBitmap(bitmaps.get(i));
                View view = new View(PhotoShowActivity.this);
                view.setLayoutParams(viewPager.getLayoutParams());
                view.setBackground(imageView.getDrawable());
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        finish();
                    }
                });
                viewList.add(view);
            }
            dots.get(getNum).setBackgroundResource(R.drawable.dot_focus);
            viewPager.setAdapter(new ImageAdapter(viewList));
            viewPager.setCurrentItem(getNum);//设置此次要显示的pager
        }
    };

    private int getWidth() {   //获取宽度
        DisplayMetrics dm = getResources().getDisplayMetrics();
        int w_screen = dm.widthPixels;
        return w_screen;
    }

    private int getHeight() {   //获取宽度
        DisplayMetrics dm = getResources().getDisplayMetrics();
        int w_screen = dm.heightPixels;
        int ivHeight = w_screen / 7 * 5;
        return w_screen;
    }

}
logImageMode 一个图片model
public class logImageMode implements Serializable {
    private String appraiseFileId;
    private String filePath;

    public String getFilePath() {
        return filePath;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }


    public String getAppraiseFileId() {
        return appraiseFileId;
    }

    public void setAppraiseFileId(String appraiseFileId) {
        this.appraiseFileId = appraiseFileId;
    }
}
对应xml activity_photo_show.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical"
    tools:context="com.schooling.anzhen.main.indoorwork.PhotoShowActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"></LinearLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_gravity="bottom"
        android:layout_weight="5"
        android:background="#ffffff">

    </android.support.v4.view.ViewPager>

    <LinearLayout
        android:id="@+id/dotcontaint"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_alignParentBottom="true"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal" />
</LinearLayout>
使用的ImageAdapter 与滚动图中的adapter有一点不同
public class ImageAdapter extends PagerAdapter {

    private ArrayList<View> viewlist;

    public ImageAdapter(ArrayList<View> viewlist) {
        this.viewlist = viewlist;
    }

    @Override
    public int getCount() {
        //设置成最大,使用户看不到边界
        return viewlist.size();
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0==arg1;
    }
    @Override
    public void destroyItem(ViewGroup container, int position,
                            Object object) {
        //Warning:不要在这里调用removeView
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //对ViewPager页号求模取出View列表中要显示的项
        position %= viewlist.size();
        if (position<0){
            position = viewlist.size()+position;
        }
        View view = viewlist.get(position);
        //如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。
        ViewParent vp =view.getParent();
        if (vp!=null){
            ViewGroup parent = (ViewGroup)vp;
            parent.removeView(view);
        }
        container.addView(view);
        //add listeners here if necessary
        return view;
    }
}
其他xml参考滚动图