zoukankan      html  css  js  c++  java
  • 显示大图Activity(支持手势放大)

    xml:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/black">
    
        <android.support.v4.view.ViewPager
            android:id="@+id/picViewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </RelativeLayout>
    

      

    java类:

    public class ActShowBigPicture extends BaseActivity implements ZoomImageView.onImageTouchedListener {
    /** 图片url集合 intent key */
    public static final String INTENT_PICURLS = "picUrls";
    /** 显示下标 intent key */
    public static final String INTENT_SHOW_POS = "showPos";

    private List<String> picUrls; // 图片URL集合
    private int showPos; // 显示下标
    private int oldPosition = 0;

    private ViewPager picViewPager;

    private List<View> zoomImageViewContainers;
    private List<ZoomImageView> zoomImageViews;
    private DisplayImageOptions mPicOptions;

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

    mBar.setVisibility(View.GONE);

    dismissLoadingView();

    // 获取传递过来的Intent对象
    Intent intent = getIntent();
    picUrls = intent.getStringArrayListExtra(INTENT_PICURLS);
    showPos = intent.getIntExtra(INTENT_SHOW_POS, 0);

    if (null == picUrls || picUrls.size() <= 0) {
    finish();
    return ;
    }

    mPicOptions = new DisplayImageOptions.Builder()
    .showImageOnLoading(R.drawable.def_banner_img)
    .showImageOnFail(R.drawable.def_banner_img)
    .showImageForEmptyUri(R.drawable.def_banner_img)
    .cacheOnDisk(true)
    .cacheInMemory(false)
    .displayer(new FadeInBitmapDisplayer(200, true, true, false)) // 显示动画
    .build();

    // 初始化View
    picViewPager = (ViewPager)findViewById(R.id.picViewPager);

    // 设置事件
    // findViewById(R.id.layout_back).setOnClickListener(this);

    zoomImageViews = new ArrayList<>();
    zoomImageViewContainers = new ArrayList<>();
    for (int i=0; i<picUrls.size(); i++) {
    View zoomImageViewContainer = getLayoutInflater().inflate(R.layout.item_big_picture, null);
    ZoomImageView zommImageView = (ZoomImageView)zoomImageViewContainer.findViewById(R.id.zommImageView);
    zommImageView.setOnImageTouchedListener(this);
    zommImageView.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    ZoomImageView curZoomImageView = (ZoomImageView)v;
    Bitmap tempImageBitmap = curZoomImageView.getImageBitmap();
    if (null == tempImageBitmap) {
    return false;
    }

    int curW = tempImageBitmap.getWidth();
    int curH = tempImageBitmap.getWidth();

    Matrix m = curZoomImageView.getImageViewMatrix();
    RectF rect = new RectF(0, 0, curW, curH);
    m.mapRect(rect);
    // 图片超出屏幕范围后移动
    // Log.i("wg", "rect.right= " + rect.right + " _ rect.left = " + rect.left);
    if (!(rect.right > curZoomImageView.getWidth() + 0.1 && rect.left < -0.1)) {
    picViewPager.requestDisallowInterceptTouchEvent(false);
    } else {
    picViewPager.requestDisallowInterceptTouchEvent(true);
    }

    return false;
    }
    });

    zoomImageViewContainers.add(zoomImageViewContainer);
    zoomImageViews.add(zommImageView);
    }

    // 设置图片间的间距
    // final float scale = getResources().getDisplayMetrics().density;
    // int pagerMarginPixels = (int) (PAGER_MARGIN_DP * scale + 0.5f);
    // picViewPager.setPageMargin(pagerMarginPixels);
    // picViewPager.setPageMarginDrawable(new ColorDrawable(Color.BLACK));
    // 设置适配器
    picViewPager.setAdapter(new PagerAdapter() {
    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
    ((ViewPager)arg0).removeView(zoomImageViewContainers.get(arg1));
    }

    @Override
    public int getCount() {
    return zoomImageViewContainers.size();
    }

    @Override
    public Object instantiateItem(View arg0, int arg1) {
    View v = zoomImageViewContainers.get(arg1);
    ((ViewPager) arg0).addView(v, 0);
    return v;
    }

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

    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {
    }

    @Override
    public Parcelable saveState() {
    return null;
    }

    @Override
    public void startUpdate(View arg0) {
    }
    });
    picViewPager.setOnPageChangeListener(new SimpleOnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
    // 恢复原图最小化
    ZoomImageView oldImageViewTouch = zoomImageViews.get(oldPosition);
    if (null != oldImageViewTouch && null != oldImageViewTouch.getImageBitmap() && !oldImageViewTouch.getImageBitmap().isRecycled()) {
    oldImageViewTouch.zoomTo(oldImageViewTouch.zoomDefault());
    }

    ZoomImageView curImageViewTouch = zoomImageViews.get(position);
    Bitmap curImageBitmap = curImageViewTouch.getImageBitmap();
    // 当图片Bitmap为空或者已经被回收的时候才去加载
    if (null == curImageBitmap || curImageBitmap.isRecycled()) {
    loadImageViewBitmap(picUrls.get(position), curImageViewTouch, null);
    }

    oldPosition = position;
    }
    });

    picViewPager.setCurrentItem(showPos, false);
    if (showPos == 0) {
    // 显示第一张图片
    // 显示Loading
    ImageLoader.getInstance().displayImage(picUrls.get(0), zoomImageViews.get(0), mPicOptions, new SimpleImageLoadingListener(){
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
    super.onLoadingComplete(imageUri, view, loadedImage);

    // ((FrameLayout)zoomImageViews.get(0).getParent()).findViewById(R.id.pagerLoad).setVisibility(View.GONE);
    }

    @Override
    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
    super.onLoadingFailed(imageUri, view, failReason);

    // 隐藏Loading
    // ((FrameLayout)zoomImageViews.get(0).getParent()).findViewById(R.id.pagerLoad).setVisibility(View.GONE);

    // 显示loading错误View
    // ((FrameLayout)zoomImageViews.get(0).getParent()).findViewById(R.id.loaddataErrRL).setVisibility(View.VISIBLE);
    }
    });
    }
    }

    private void loadImageViewBitmap(final String picUrl, final ImageView iv, final View parentView) {
    if (null != parentView) {
    // 显示Loading
    // parentView.findViewById(R.id.pagerLoad).setVisibility(View.VISIBLE);
    }

    ImageLoader.getInstance().displayImage(picUrl, iv, mPicOptions, new SimpleImageLoadingListener() {
    @Override
    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
    super.onLoadingFailed(imageUri, view, failReason);

    // 获取父View
    // final FrameLayout parentView = (FrameLayout)iv.getParent();

    // 隐藏Loading
    // parentView.findViewById(R.id.pagerLoad).setVisibility(View.GONE);

    // 显示loading错误View
    // parentView.findViewById(R.id.loaddataErrRL).setVisibility(View.VISIBLE);
    }

    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
    super.onLoadingComplete(imageUri, view, loadedImage);

    // 获取父View
    // final FrameLayout parentView = (FrameLayout)iv.getParent();

    if (null == loadedImage) {
    // 显示loading错误View
    // parentView.findViewById(R.id.loaddataErrRL).setVisibility(View.VISIBLE);
    }

    // 隐藏Loading
    // parentView.findViewById(R.id.pagerLoad).setVisibility(View.GONE);

    }
    });
    }

    @Override
    public void onImageTouched() {
    finish();
    }

    public static void showPic(Context context, String path) {
    if (TextUtils.isEmpty(path)) return ;

    ArrayList<String> picurls = new ArrayList<>();
    picurls.add(path);
    showPic(context, picurls);
    }

    public static void showPic(Context context, ArrayList<String> picurls) {
    showPic(context, picurls, 0);
    }

    public static void showPic(Context context, ArrayList<String> picurls, int postion) {
    if (null == picurls || picurls.size() == 0) return ;

    Intent intent = new Intent(context, ActShowBigPicture.class);
    intent.putStringArrayListExtra(ActShowBigPicture.INTENT_PICURLS, picurls);
    if (postion != 0) {
    intent.putExtra(INTENT_SHOW_POS, postion);
    }
    context.startActivity(intent);
    }


    @Override
    protected boolean isNotSwipe() {
    return true;
    }
    }

      

    ZoomImageView类参考前一篇随笔
  • 相关阅读:
    Selector + 线程池 遇到的问题
    【转】Android TabActivity无法正常bindService解决方法
    Android 中的 Service 全面总结
    【转】IT 圈里有哪些经常被读错的词?
    【转】线程的7种状态及相互转换
    【eoeandroid 特刊】第117期打包网盘下载地址
    使用 Android 自带的 proguard 混淆源码
    Google+ 连接不上的解决办法
    【转】AsyncTask的用法
    winForm简单数据绑定
  • 原文地址:https://www.cnblogs.com/zyandroid/p/5013212.html
Copyright © 2011-2022 走看看