Android编程权威指南(第2版)—第16章挑战练习
来源:互联网 发布:软件开发报告模板 编辑:程序博客网 时间:2024/05/16 11:15
16.7挑战练习:优化照片显示
(1)新建dialog_photo.xml
<?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>
(2)新建PhotoDetailFragment.java
public class PhotoDetailFragment 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; } @NonNull @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) //.setTitle(R.string.date_picker_title) .setPositiveButton(android.R.string.ok, null) .create(); }}
(3)修改CrimeFragment.java
private static final int REQUEST_PHOTO = 3;private static final String DIALOG_PHOTO = "DialogPhoto";
onCreateView增加处理
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.java
(1)updatePhotoView,调用带宽高参数的getScaledBitmap
private void updatePhotoView(int width, int height) { if (mPhotoFile == null || !mPhotoFile.exists()) { mPhotoView.setImageDrawable(null); } else { Bitmap bitmap = PictureUtils.getScaledBitmap( mPhotoFile.getPath(), width, height); // change this one mPhotoView.setImageBitmap(bitmap); } }
(2)onCreateView加上
mPhotoObserver = mPhotoView.getViewTreeObserver(); mPhotoObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { updatePhotoView(mPhotoView.getWidth(), mPhotoView.getHeight()); } }); return v;
(3)修改onActivityResult,不然返回拍完照片返回CrimeFragment的时候会显示不出略缩图
else if (requestCode == REQUEST_PHOTO) { updatePhotoView(mPhotoView.getWidth(), mPhotoView.getHeight()); }
参考:点击打开链接
上述代码运行无误,可以达到效果,但是OnGlobalLayoutListener的原理还没有太搞懂,只知道可以通过这个方式获取视图的宽和高,待以后深入学习后再加补充。
阅读全文
0 0
- Android编程权威指南(第2版)—第16章挑战练习
- Android编程权威指南(第2版)—第2章挑战练习
- Android编程权威指南(第2版)—第6章挑战练习
- Android编程权威指南(第2版)—第5章挑战练习
- Android编程权威指南(第2版)—第8章挑战练习
- Android编程权威指南(第2版)—第10章挑战练习
- Android编程权威指南(第2版)—第13章挑战练习
- Android编程权威指南(第2版)—第12章挑战练习
- Android编程权威指南(第2版)—第14章挑战练习
- Android编程权威指南(第2版)—第15章挑战练习
- Android编程权威指南(第2版)—第20章挑战练习
- Android编程权威指南(第2版)第1/2章中的挑战练习思路
- Android编程权威指南(第二版)— 第10章挑战练习
- Android编程权威指南(第二版)— 第13章挑战练习-13.6
- Android编程权威指南(第二版)— 第13章挑战练习-13.8
- Android编程权威指南-第5章:挑战练习
- Android编程权威指南:第21章挑战练习:有一个隐式intent
- 《Android编程权威指南》第二版 第二章 挑战练习
- php中json_encode和json_decode使用注意事项
- 表单提交跳空白页面,而在链接栏上按ent键跳到目标页面
- String 之substring的用法
- 1TensorFlow实现自编码器-1.3 TensorFlow实现降噪自动编码器--计算图美化
- nmap使用指南(终极版)
- Android编程权威指南(第2版)—第16章挑战练习
- eclipse常用配置
- MySQL Replication主从复制原理及拓扑结构
- 爬虫
- 今天复习javaSE的第三章内容
- (网易2018校招笔试)[编程题] 字符串碎片
- 流程控制与数组
- 并行信号处理技术-异构并行实时处理平台
- 刚学习java的菜鸟,第一次用博客