andorid---通过Viewpager实现图片滑动以及缩放

 原创---
    
    本来通过重写gallary和imageview来实现图片滑动以及缩放,但是gallary存在一个问题,就是图片之间好像在边缘的地方出现了重叠,而且图片缩放的时候,在大于边界的情况出现了很复杂的逻辑,一时也没搞懂,所以改用ViewPager来实现.方便又快捷。至于自定义的gallary出现了什么问题暂时也没时间去搞清楚,就先放一边把。
    ViewPager---首先引入一个别人写好的库(library.jar),本想添加到日志的附件里面,坑爹腾讯,还要黄钻。

Image.java

package com.example.test;            //
包名自己改

 

import android.graphics.Bitmap;

import android.graphics.drawable.Drawable;

 

public class Image {

         privateString path;

         privateBitmap bitmap;

         privateDrawable drawable;

 

         publicString getPath() {

                   returnpath;

         }

 

         publicvoid setPath(String path) {

                   this.path= path;

         }

 

         publicBitmap getBitmap() {

                   returnbitmap;

         }

 

         publicvoid setBitmap(Bitmap bitmap) {

                   this.bitmap= bitmap;

         }

 

         publicDrawable getDrawable() {

                   returndrawable;

         }

 

         publicvoid setDrawable(Drawable drawable) {

                   this.drawable= drawable;

         }

}




MyPhotoView.java

 

 

package com.example.test;

 

import android.content.Context;

import android.graphics.Bitmap;

import uk.co.senab.photoview.PhotoView;      //从引入的库里面调用

 

public class MyPhotoView extends PhotoView{

 

         publicMyPhotoView(Context context) {

                   super(context);

         }

        

         /**

    *

    * @param bitmap

    */

   public void setImage(Bitmap bitmap) {        //mAttacher也是库里面的东西,没引入的话会报错

       super.setImageBitmap(bitmap);

       if (null != mAttacher) {

           mAttacher.update();

       }

    }

}

 

 

MyViewPager.java

 

 

package com.example.test;

 

import android.content.Context;

import android.support.v4.view.ViewPager;

import android.util.AttributeSet;

import android.view.MotionEvent;

 

public class MyViewPager extends ViewPager{

 

         publicMyViewPager(Context context) {

                   super(context);

                   //TODO Auto-generated constructor stub

         }

        

        

         publicMyViewPager(Context context, AttributeSet attrs) {

       super(context, attrs);

    }

        

        

         @Override

         publicboolean onInterceptTouchEvent(MotionEvent ev) {

                   try{

                            returnsuper.onInterceptTouchEvent(ev);

                   }catch (IllegalArgumentException e) {

                            e.printStackTrace();

                            returnfalse;

                   }

         }

}

 

重写的东西很少很简单,只需要放进去就行了,使用的话要在Activity里面下功夫,给出的例子只是将图片写死了,固定那几张图片。如果要动态的从服务器下载的话,就需要在里面添加很多的逻辑,并怎么好弄,不过有例子后面的问题就好解决了,根据自己的需要去改就行了。

MainActivity.java

 

package com.example.test;

 

import java.util.ArrayList;

import java.util.List;

 

import android.app.Activity;

import android.graphics.Bitmap;

importandroid.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

importandroid.support.v4.view.PagerAdapter;

import android.view.View;

import android.view.ViewGroup;

import android.view.ViewGroup.LayoutParams;

 

public class MainActivity extends Activity{

         privateMyViewPager pager;

         privateList<Image> images;

         privateImageAdapter adapter;

        

         privatestatic int[] sDrawables = {R.drawable.t1, R.drawable.t2, R.drawable.t3,

                   R.drawable.t4};          //写死了的图片资源,自己引入,或者动态从服务器或者网上下载。

        

         @Override

         protectedvoid onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.fragment_main);                            //布局文件只需要放入一个MyViewPager就行了,自己在.java里面已经重写了

                   pager= (MyViewPager) findViewById(R.id.my_pager);

                   images= new ArrayList<Image>();               //Image也是重写的类型

                   init();

                   pager.setAdapter(newImageAdapter(images));

                  

         }

        

         privatevoid init(){                   //图片初始化

                   for(inti = 0; i < sDrawables.length; i++){

                            BitmapDrawablebd = (BitmapDrawable) getResources().getDrawable(sDrawables[i]);

                            Bitmapbm = bd.getBitmap();

                            Imageimage = new Image();

                            image.setBitmap(bm);

                            images.add(image);

                   }

         }

        

         publicclass ImageAdapter extends PagerAdapter{                    //为图片设置适配器

                   privateList<Image> list;

                   publicImageAdapter(List<Image> list){

                            this.list= list;

                   }

                  

                   @Override

                   publicView instantiateItem(ViewGroup container, int position) {

                            Imageimage = list.get(position);              //动态下载的话,我选择的是BitMap数组,不习惯用List

                           

                            MyPhotoViewphotoView = null;

                            if(null!= image){

                                     photoView= new MyPhotoView(container.getContext());

                                     photoView.setImage(image.getBitmap());

                            }

                            container.addView(photoView,LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

                            returnphotoView;

                   }

 

                   @Override

                   publicvoid destroyItem(ViewGroup container, int position, Object object) {

                            container.removeView((View)object);

                   }

 

                   @Override

                   publicboolean isViewFromObject(View view, Object object) {

                            returnview == object;

                   }

 

                   @Override

                   publicint getCount() {

                            returnimages.size();                     //返回图片总数

                   }

                  

         }

}


记住在自己的工程里面引入Library库,否则活报错。

备注:图片浏览配一个显示图片的张数和图片总数会显得更加人性化,只需要在Layout里面添加一个textview然后MyViewPager添加OnPageChangeListener,就可以动态去改变textview 希望对学习有帮助,并方便以后使用。

                                                                                                                                                                                             7月30号, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值