点击某个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); } } }