Android编程权威指南(第2版)--第16章 使用intent拍照 挑战练习
Posted lijianming180
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android编程权威指南(第2版)--第16章 使用intent拍照 挑战练习相关的知识,希望对你有一定的参考价值。
16.7挑战练习:优化照片显示新建dialog_photo.xml1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
<ImageView android:id="@+id/crime_photo_detail" android:layout_width="match_parent" android:layout_height="match_parent" />
</LinearLayout>
|
新建PhotoDetailFragment.java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public class extends DialogFragment {
private static final String ARG_File = "file"; private ImageView mPhotoView;
public static PhotoDetailFragment newInstance(File file) { Bundle args = new Bundle(); args.putSerializable(ARG_File, file);
PhotoDetailFragment fragment = new PhotoDetailFragment(); fragment.setArguments(args); return fragment; }
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { File file = (File) getArguments().getSerializable(ARG_File);
View v = LayoutInflater.from(getActivity()) .inflate(R.layout.dialog_photo, null); mPhotoView = (ImageView) v.findViewById(R.id.crime_photo_detail);
Bitmap bitmap = PictureUtils.getScaledBitmap( file.getPath(), getActivity()); mPhotoView.setImageBitmap(bitmap);
return new AlertDialog.Builder(getActivity()) .setView(v) .setPositiveButton(android.R.string.ok, null) .create();
} }
|
修改CrimeFragment.java1 2
| private static final int REQUEST_PHOTO = 3; private static final String DIALOG_PHOTO = "DialogPhoto";
|
onCreateView增加处理
大专栏 Android编程权威指南(第2版)--第16章 使用intent拍照 挑战练习r">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| mPhotoView = (ImageView) v.findViewById(R.id.crime_photo); mPhotoView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mPhotoFile == null || !mPhotoFile.exists()) { mPhotoView.setImageDrawable(null); } else {
FragmentManager manager = getFragmentManager(); PhotoDetailFragment dialog = PhotoDetailFragment.newInstance(mPhotoFile); dialog.setTargetFragment(CrimeFragment.this, REQUEST_PHOTO); dialog.show(manager, DIALOG_PHOTO);
}
} }); updatePhotoView();
|
演示结果:
16.8 挑战练习:优化缩略图加载修改CrimeFragment.javaupdatePhotoView,调用带宽高参数的getScaledBitmap1 2 3 4 5 6 7 8 9
| private void updatePhotoView(int width, int height) { if (mPhotoFile == null || !mPhotoFile.exists()) { mPhotoView.setImageDrawable(null); } else { Bitmap bitmap = PictureUtils.getScaledBitmap( mPhotoFile.getPath(), width, height); mPhotoView.setImageBitmap(bitmap); } }
|
onCreateView加上1 2 3 4 5 6 7 8
| mPhotoObserver = mPhotoView.getViewTreeObserver(); mPhotoObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { updatePhotoView(mPhotoView.getWidth(), mPhotoView.getHeight()); } }); return v;
|
修改onActivityResult,不然返回拍完照片返回CrimeFragment的时候会显示不出略缩图1 2 3
| else if (requestCode == REQUEST_PHOTO) { updatePhotoView(mPhotoView.getWidth(), mPhotoView.getHeight()); }
|
上述代码运行无误,可以达到效果,虽然可以通过OnGlobalLayoutListener这个方式获取视图的宽和高,但是还没搞清楚,待日后补充吧参考:点击打开链接
Github具体代码:hyyyrwang.github.io
我的简书:https://www.jianshu.com/p/1b9785db93a6
以上是关于Android编程权威指南(第2版)--第16章 使用intent拍照 挑战练习的主要内容,如果未能解决你的问题,请参考以下文章
电子书 Android编程权威指南 第2版.pdf
Android开发权威指南的图书目录
javascript权威指南第16章 HTML5脚本编程
安卓权威编程指南-笔记(第25章 搜索)
Android编程权威指南.第3版.pdf PDF下载
安卓权威编程指南-笔记 (第29章定制视图与触摸事件)
|