Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
最近有看到有朋友在讨论QQ头像的裁剪上传是怎么实现的,吼吼,小马也没做过,好奇之下学习下,发现以前项目中有类型的功能,结合官方文档里面的解释,就更好玩了,周末,急急忙忙写的,记录在博客里,希望能与大家交流学习,也恳请高手能解答小马在代码注释中提出的疑问,不管有没有人回答,小马先谢谢了,一样的,先看下效果图(效果图小马不解释了,直接流水写下去,小马是直接在模拟器里写的,能在真机上使用,因为很简单),再看代码是怎么实现的:一:主布局界面
二:点击控件触发事件后效果图
三:拍照完之后效果图
四:裁剪界面效果图
五:点击相册后返回的图片效果图
六:裁剪完从相册PICK的保存后的效果图
下面直接来看下主控制类代码,如下:
1. package com.xiaoma.piccut.demo;
2.
3. import java.io.File;
4. import android.app.Activity;
5. import android.app.AlertDialog;
6. import android.content.DialogInte易做图ce;
7. import android.content.Intent;
8. import android.graphics.Bitmap;
9. import android.graphics.drawable.BitmapDrawable;
10. import android.graphics.drawable.Drawable;
11. import android.net.Uri;
12. import android.os.Bundle;
13. import android.os.Environment;
14. import android.provider.MediaStore;
15. import android.view.View;
16. import android.view.View.OnClickListener;
17. import android.widget.Button;
18. import android.widget.ImageButton;
19. import android.widget.ImageView;
20. /**
21. * @Title: PicCutDemoActivity.java
22. * @Package com.xiaoma.piccut.demo
23. * @Description: 图片裁剪功能测试
24. * @author XiaoMa
25. */
26. public class PicCutDemoActivity extends Activity implements OnClickListener {
27.
28. private ImageButton ib = null;
29. private ImageView iv = null;
30. private Button btn = null;
31. private String tp = null;
32.
33.
34. /** Called when the activity is first created. */
35. @Override
36. public void onCreate(Bundle savedInstanceState) {
37. super.onCreate(savedInstanceState);
38. setContentView(R.layout.main);
39. //初始化
40. init();
41. }
42.
43. /**
44. * 初始化方法实现
45. */
46. private void init() {
47. ib = (ImageButton) findViewById(R.id.imageButton1);
48. iv = (ImageView) findViewById(R.id.imageView1);
49. btn = (Button) findViewById(R.id.button1);
50. ib.setOnClickListener(this);
51. iv.setOnClickListener(this);
52. btn.setOnClickListener(this);
53. }
54.
55.
56. /**
57. * 控件点击事件实现
58. *
59. * 因为有朋友问不同控件的背景图裁剪怎么实现,
60. * 我就在这个地方用了三个控件,只为了自己记录学习
61. * 大家觉得没用的可以跳过啦
62. */
63. @Override
64. public void onClick(View v) {
65. switch (v.getId()) {
66. case R.id.imageButton1:
67. ShowPickDialog();
68. break;
69. case R.id.imageView1:
70. ShowPickDialog();
71. break;
72. case R.id.button1:
73. ShowPickDialog();
74. break;
75.
76. default:
77. break;
78. }
79. }
80.
81. /**
82. * 选择提示对话框
83. */
84. private void ShowPickDialog() {
85. new AlertDialog.Builder(this)
86. .setTitle("设置头像...")
87. .setNegativeButton("相册", new DialogInte易做图ce.OnClickListener() {
88. public void onClick(DialogInte易做图ce dialog, int which) {
89. dialog.dismiss();
90. /**
91. * 刚开始,我自己也不知道ACTION_PICK是干嘛的,后来直接看Intent源码,
92. * 可以发现里面很多东西,Intent是个很强大的东西,大家一定仔细阅读下
93. */
94. &n
补充:移动开发 , Android ,