在DialogFragment中显示大图片

点击某个ImageView,显示大图片

1.创建ImageFragment,来装图片

public class ImageFragment extends DialogFragment {
    public static final String EXTRA_IMAGE_PATH="com.xunbaola.record.image_path";
    private ImageView mImageView;
    public static ImageFragment newInstance(String imagePath){
        Bundle args=new Bundle();
        args.putSerializable(EXTRA_IMAGE_PATH,imagePath);
        ImageFragment fragment=new ImageFragment();
        fragment.setArguments(args);
        fragment.setStyle(DialogFragment.STYLE_NO_TITLE,0);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mImageView=new ImageView(getActivity());
        String path=getArguments().getString(EXTRA_IMAGE_PATH);
        BitmapDrawable image= PictureUtils.getScaledDrawable(getActivity(),path);
        mImageView.setImageDrawable(image);
        return mImageView;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        PictureUtils.cleanImageView(mImageView);
    }
}
2.显示ImageFragment界面

mPhoto1View.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Photo p=mRecord.getPhoto1();
        if (p==null) return;
        android.support.v4.app.FragmentManager fm=getActivity().getSupportFragmentManager();
        String path=getActivity().getFileStreamPath(p.getFilename()).getAbsolutePath();
        ImageFragment.newInstance(path).show(fm,DIALOG_IMAGE1);
    }
});
private static final String DIALOG_IMAGE1 = "image1";//唯一定位ImageFragment在FragmentManager
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.view.Display;
import android.widget.ImageView;

public class PictureUtils {
    public static BitmapDrawable getScaledDrawable(Activity a,String path){
        Display display=a.getWindowManager().getDefaultDisplay();
        float destWidth=display.getWidth();
        float destHeight=display.getHeight();
        BitmapFactory.Options options=new BitmapFactory.Options();
        options.inJustDecodeBounds=true;
        BitmapFactory.decodeFile(path,options);
        float srcWidth=options.outWidth;
        float srcHeight=options.outHeight;
        int inSampleSize=1;
        if (srcHeight>destHeight||srcWidth>destWidth){
            if (srcWidth>srcHeight) {
                inSampleSize=Math.round(srcHeight/destHeight);
            }else {
                inSampleSize=Math.round(srcWidth/destWidth);
            }

        }
        options=new BitmapFactory.Options();
        options.inSampleSize=inSampleSize;
        Bitmap bitmap= BitmapFactory.decodeFile(path,options);
        return new BitmapDrawable(a.getResources(),bitmap);
    }
    public static void cleanImageView(ImageView imageView){
       BitmapDrawable b= imageView.getDrawable() instanceof BitmapDrawable ? ((BitmapDrawable) imageView.getDrawable()) : null;
        if (b != null) {
            b.getBitmap().recycle();
            imageView.setImageDrawable(null);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值