viewpager从本地显示图片并可滑动

/**
* 装ImageView数组
*/
private ImageView[] mImageViews;

/**
 * 图片资源
 */
private String[] imgIdArray;

@Override
public void onDestroyView() {
    super.onDestroyView();
}

/**
 * @author
 */
public class MyAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        int count = 0;
        if (mImageViews != null) {
            count = mImageViews.length;
        }
        return count;
        // 设置成最大,使用户看不到边界

//
// if (mImageViews.length == 1) {
// return 1;
// } else {
// return Integer.MAX_VALUE;
// }
}

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }

    @Override
    public void destroyItem(View container, int position, Object object) {
        ((ViewPager) container).removeView(mImageViews[position % mImageViews.length]);

    }

    /**
     * 载入图片进去,用当前的position 除以 图片数组长度取余数是关键
     */
    @Override
    public Object instantiateItem(View container, int position) {
        ImageView imageView = mImageViews[position % mImageViews.length];
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        if (imageView.getParent() != null) {
            ((ViewPager) imageView.getParent()).removeView(imageView);
        }
        ((ViewPager) container).addView(imageView, 0);
        return imageView;
    }


}

@Override
public void onPageScrollStateChanged(int arg0) {

}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}

@Override
public void onPageSelected(int arg0) {
    currentpage.setText(String.valueOf(arg0 + 1));
    Log.i("0612", "arg0: " + arg0);
}

/**
* 从sd卡获取图片资源
*
* @return
*/
private List getImagePathFromSD() {
// 图片列表
imagePathList = new ArrayList();
// 得到sd卡内image文件夹的路径 File.separator(/)
String filePath = MainActivity.PATH + “/qlink/record_file/” + QLinkApp.getApplication().getLocalStorage().getAccountUid() + “/”
+ alarmtime + “/”;
if (filePath!=null) {
// 得到该路径文件夹下所有的文件
File fileAll = new File(filePath);
File[] files = fileAll.listFiles();
// 将所有的文件存入ArrayList中,并过滤所有图片格式的文件
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (checkIsImageFile(file.getPath())) {
imagePathList.add(file.getPath());
}
}
}
// 返回得到的图片列表
return imagePathList;
}

/**
 * 检查扩展名,得到图片格式的文件
 *
 * @param fName 文件名
 * @return
 */
private boolean checkIsImageFile(String fName) {
    boolean isImageFile = false;
    // 获取扩展名
    String FileEnd = fName.substring(fName.lastIndexOf(".") + 1,
            fName.length()).toLowerCase();
    if (FileEnd.equals("jpg") || FileEnd.equals("png") || FileEnd.equals("gif")
            || FileEnd.equals("jpeg") || FileEnd.equals("bmp")) {
        isImageFile = true;
    } else {
        isImageFile = false;
    }
    return isImageFile;
}

private void initImage(List imagePathList) {
//将图片装载到数组中
mImageViews = new ImageView[imagePathList.size()];
for (int i = 0; i < mImageViews.length; i++) {
Activity activity = getActivity();
if (activity != null) {
ImageView imageView = new ImageView(activity);
mImageViews[i] = imageView;
Bitmap bitmap = BitmapFactory.decodeFile(imagePathList.get(i));
imageView.setImageBitmap(bitmap);
}
}

    //设置Adapter
    if (viewPager != null) {
        viewPager.setAdapter(new MyAdapter());
        //设置监听,主要是设置点点的背景
        viewPager.setOnPageChangeListener(this);

        //设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动

// viewPager.setCurrentItem(mImageViews.length*50+1);
viewPager.setCurrentItem(0);
}
totalpage.setText(String.valueOf(imagePathList.size()));
number.setVisibility(View.VISIBLE);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
public class Touch extends Activity implements OnTouchListener, OnClickListener { private static final String TAG = "Touch" ; // These matrices will be used to move and zoom image Matrix matrix = new Matrix(); Matrix savedMatrix = new Matrix(); PointF start = new PointF(); PointF mid = new PointF(); float oldDist; private ImageView view; private Button zoomIn, zoomOut; //button zoom private float scaleWidth = 1; private float scaleHeight = 1; private Bitmap bmp, zoomedBMP; private int zoom_level = 0; private static final double ZOOM_IN_SCALE = 1.25;//放大系数 private static final double ZOOM_OUT_SCALE = 0.8;//缩小系数 // We can be in one of these 3 states static final int NONE = 0; static final int DRAG = 1; static final int ZOOM = 2; int mode = NONE; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //放大按钮 zoomIn = (Button) findViewById(R.id.zoom_in); //缩小按钮 zoomOut = (Button) findViewById(R.id.zoom_out); zoomIn.setOnClickListener(this); zoomOut.setOnClickListener(this); view = (ImageView) findViewById(R.id.imageView); view.setOnTouchListener(this); //取得drawable中图片,放大,缩小,多点触摸的作用对象 bmp = BitmapFactory.decodeResource(Touch.this.getResources(), R.drawable.butterfly); } public boolean onTouch(View v, MotionEvent event) { // Handle touch events here... ImageView view = (ImageView) v; // Handle touch events here... switch (event.getAction() & MotionEvent.ACTION_MASK) { //设置拖拉模式 case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix); start.set(event.getX(), event.getY()); Log.d(TAG, "mode=DRAG" ); mode = DRAG; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: mode = NONE; Log.d(TAG, "mode=NONE" ); break; //设置多点触摸模式 case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); Log.d(TAG, "oldDist=" + oldDist); if (oldDist > 10f) { savedMatrix.set(matrix); midPoint(mid, event); mode = ZOOM; Log.d(TAG, "mode=ZOOM" ); } break; //若为DRAG模式,则点击移动图片 case MotionEvent.ACTION_MOVE: if (mode == DRAG) { matrix.set(savedMatrix); // 设置位移 matrix.postTranslate(event.getX() - start.x, event.getX() - start.x); } //若为ZOOM模式,则多点触摸缩放 else if (mode == ZOOM) { float newDist = spacing(event); Log.d(TAG, "newDist=" + newDist); if (newDist > 10f) { matrix.set(savedMatrix); float scale = newDist / oldDist; //设置缩放比例和图片中点位置 matrix.postScale(scale, scale, mid.x, mid.y); } } break; } // Perform the transformation view.setImageMatrix(matrix); return true; // indicate event was handled } //计算移动距离 private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return FloatMath.sqrt(x * x + y * y); } //计算中点位置 private void midPoint(PointF point, MotionEvent event) { float x = event.getX(0) + event.getX(1); float y = event.getY(0) + event.getY(1); point.set(x / 2, y / 2); } //放大,缩小按钮点击事件 @Override public void onClick(View v) { if(v == zoomIn){ enlarge(); }else if (v == zoomOut) { small(); } } //按钮点击缩小函数 private void small() { int bmpWidth = bmp.getWidth(); int bmpHeight = bmp.getHeight(); scaleWidth = (float) (scaleWidth * ZOOM_OUT_SCALE); scaleHeight = (float) (scaleHeight * ZOOM_OUT_SCALE); Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); zoomedBMP = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true); view.setImageBitmap(zoomedBMP); } //按钮点击放大函数 private void enlarge() { try { int bmpWidth = bmp.getWidth(); int bmpHeight = bmp.getHeight(); scaleWidth = (float) (scaleWidth * ZOOM_IN_SCALE); scaleHeight = (float) (scaleHeight * ZOOM_IN_SCALE); Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); zoomedBMP = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true); view.setImageBitmap(zoomedBMP); } catch (Exception e) { //can't zoom because of memory issue, just ignore, no big deal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值