您的位置:首页 > 其它

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

2016-04-27 20:01 603 查看
原创---

本来通过重写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号,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: