用開源項目PhotoView實現圖片的雙指縮放和雙擊放大縮小


 

項目地址:https://github.com/chrisbanes/PhotoView

 

  用開源項目有個好處,一是實現簡單,二是bug少。那么我們就來說下這個項目能夠實現的效果:

1.單個圖片的雙指縮放,雙擊放大縮小

PhotoViewAttacher mAttacher;
    ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Any implementation of ImageView can be used!
        mImageView = (ImageView) findViewById(R.id.iv_photo);

        // Set the Drawable displayed
        Drawable bitmap = getResources().getDrawable(R.drawable.ic_launcher);
        mImageView.setImageDrawable(bitmap);

        // Attach a PhotoViewAttacher, which takes care of all of the zooming
        // functionality.
        mAttacher = new PhotoViewAttacher(mImageView);

 

2.圖片的旋轉效果,可以精准指定旋轉的度數

    private PhotoView photo;
    private final Handler handler = new Handler();
    private boolean rotating = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        photo = new PhotoView(this);
        photo.setImageResource(R.drawable.wallpaper);
        setContentView(photo);

     photo.setRotationBy(10);
    }    

 

3.放入viewpager來做照片瀏覽,瀏覽中可以放大和縮小(這里的viewpager可以設置是否允許左右滑動,如果不用這功能,就直接用普通的viewpager)

private static final String ISLOCKED_ARG = "isLocked";
    
    private ViewPager mViewPager;
    private MenuItem menuLockItem;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_pager);
        mViewPager = (HackyViewPager) findViewById(R.id.view_pager);
        setContentView(mViewPager);

        mViewPager.setAdapter(new SamplePagerAdapter());
        
        if (savedInstanceState != null) {
            boolean isLocked = savedInstanceState.getBoolean(ISLOCKED_ARG, false);
            ((HackyViewPager) mViewPager).setLocked(isLocked);
        }
    }

    static class SamplePagerAdapter extends PagerAdapter {

        private static final int[] sDrawables = { R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper,
                R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper };

        @Override
        public int getCount() {
            return sDrawables.length;
        }

        @Override
        public View instantiateItem(ViewGroup container, int position) {
            //定義可以縮放的圖片對象
            PhotoView photoView = new PhotoView(container.getContext());
            photoView.setImageResource(sDrawables[position]);

            // Now just add PhotoView to ViewPager and return it
            container.addView(photoView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

            return photoView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

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

    }

 

這是官方文檔的例子

ImageView mImageView;
PhotoViewAttacher mAttacher;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Any implementation of ImageView can be used!
    mImageView = (ImageView) findViewById(R.id.iv_photo);

    // Set the Drawable displayed
    Drawable bitmap = getResources().getDrawable(R.drawable.wallpaper);
    mImageView.setImageDrawable(bitmap);

    // Attach a PhotoViewAttacher, which takes care of all of the zooming functionality.
    mAttacher = new PhotoViewAttacher(mImageView);
}


// If you later call mImageView.setImageDrawable/setImageBitmap/setImageResource/etc then you just need to call
attacher.update();

 

下面給出的源碼是我修改過的,我把原來的放大兩次變成了放大一次,然后再雙擊的話就縮小到原圖。至於單擊直接退出的效果我給出一個思路,點擊一個縮略圖后開啟一個activity,用漸變的效果顯示。在這個彈出的activity放一個可以縮放的圖片,然后給這個圖片加個監聽器(源碼中我已經加了),點擊后這個activity漸變消失。很簡單吧~ 不過這里面需要注意的是縮略圖的設置還有彈出activity時很可能要用進度條來等待網絡圖片

 

源碼下載:http://download.csdn.net/detail/shark0017/7710153


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM