本来通过重写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号,