Android中使用PhotoView和ViewPager查看图片,并保存到本地

 如下图:可以滑动查看,可以放大缩小,点击长按保存图片

 Android中使用PhotoView和ViewPager查看图片,并保存到本地_第1张图片   Android中使用PhotoView和ViewPager查看图片,并保存到本地_第2张图片

 build.gradle中添加依赖

compile 'com.github.chrisbanes.photoview:library:+'
    //glide
compile 'com.github.bumptech.glide:glide:3.7.0'

 外部 build.gradle

allprojects {
    repositories {
        jcenter()
        //PhotoView
        maven { url "https://jitpack.io" }
    }
}

 main布局文件




    

    


 MainActivity

public class MainActivity extends AppCompatActivity {
    private List fragmentList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPager viewpager = (ViewPager) findViewById(R.id.viewpager);
        final TextView tv_num = (TextView) findViewById(R.id.tv_num);


        Fragment fragment1 = PhotoFragment.newInstance("http://img1.3lian.com/2015/w22/87/d/105.jpg");
        Fragment fragment2 = PhotoFragment.newInstance("http://a3.topitme.com/0/d0/f1/1128126520d81f1d00o.jpg");
        Fragment fragment3 = PhotoFragment.newInstance("http://pic30.nipic.com/20130605/7447430_151725918000_2.jpg");
        Fragment fragment4 = PhotoFragment.newInstance("http://img1.3lian.com/2015/a1/46/d/100.jpg");
        Fragment fragment5 = PhotoFragment.newInstance("http://img2.imgtn.bdimg.com/it/u=294543409,575604841&fm=26&gp=0.jpg");
        Fragment fragment6 = PhotoFragment.newInstance("http://pic28.photophoto.cn/20130809/0036036894761435_b.jpg");

        fragmentList.add(fragment1);
        fragmentList.add(fragment2);
        fragmentList.add(fragment3);
        fragmentList.add(fragment4);
        fragmentList.add(fragment5);
        fragmentList.add(fragment6);

        tv_num.setText(1+"/"+fragmentList.size());
        PhotoFragmentAdapter adapter = new PhotoFragmentAdapter(getSupportFragmentManager(),fragmentList);
        viewpager.setAdapter(adapter);
        viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
              tv_num.setText(position+1+"/"+fragmentList.size());
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        viewpager.setCurrentItem(2);
    }
}

 PhotoFragment

public class PhotoFragment extends Fragment {
    private String url;
    private PhotoView mPhotoView;

    /**
     * 获取这个fragment需要展示图片的url
     * @param url
     * @return
     */
    public static PhotoFragment newInstance(String url) {
        PhotoFragment fragment = new PhotoFragment();
        Bundle args = new Bundle();
        args.putString("url", url);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        url = getArguments().getString("url");
    }



    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_img, container, false);
        mPhotoView = view.findViewById(R.id.photoview);
        //设置缩放类型,默认ScaleType.CENTER(可以不设置)
        mPhotoView.setScaleType(ImageView.ScaleType.CENTER);
        mPhotoView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {

                //Toast.makeText(getActivity(),"长按事件"+url,Toast.LENGTH_SHORT).show();

                mPhotoView.setDrawingCacheEnabled(true);
                Bitmap obmp = Bitmap.createBitmap(mPhotoView.getDrawingCache());
                mPhotoView.setDrawingCacheEnabled(false);
                saveMyBitmap(getActivity(), obmp);
                return true;
            }
        });
        mPhotoView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {
            @Override
            public void onPhotoTap(View view, float x, float y) {
                Toast.makeText(getActivity(),"点击事件,真实项目中可关闭activity",Toast.LENGTH_SHORT).show();
                getActivity().finish();
            }
        });
        Glide.with(getContext())
                .load(url)
                .placeholder(R.mipmap.ic_launcher)//加载过程中图片未显示时显示的本地图片
                .error(R.mipmap.ic_launcher)//加载异常时显示的图片
//                .centerCrop()//图片图填充ImageView设置的大小
                .fitCenter()//缩放图像测量出来等于或小于ImageView的边界范围,该图像将会完全显示
                .into(mPhotoView);
        return view;
    }


    //保存文件到指定路径
    public void saveMyBitmap(Context context, Bitmap bitmap) {
        String sdCardDir = Environment.getExternalStorageDirectory() + "/DCIM/";
        File appDir = new File(sdCardDir, "HappyBirthday");
        if (!appDir.exists()) {//不存在
            appDir.mkdir();
        }
        String fileName = "HappyBirthday" + System.currentTimeMillis() + ".jpg";
        File file = new File(appDir, fileName);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        Uri uri = Uri.fromFile(file);
        intent.setData(uri);
        getActivity().sendBroadcast(intent);
        Toast.makeText(getActivity(),"图片保存成功",Toast.LENGTH_SHORT).show();
    }

}

 PhotoFragmentAdapter

public class PhotoFragmentAdapter extends FragmentPagerAdapter{
    private List fragmentList;

    public PhotoFragmentAdapter(FragmentManager fm,List fragmentList) {
        super(fm);
        this.fragmentList = fragmentList;
    }


    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }
}

 fragment_img布局


    


最后 别忘了权限


    
    

完成

源码地址:https://download.csdn.net/download/changyiqiang/10745762

你可能感兴趣的:(图片)