当前位置:操作系统 > 安卓/Android >>

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.DialogInterface; 
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 DialogInterface.OnClickListener() { 
88.                     public void onClick(DialogInterface dialog, int which) { 
89.                         dialog.dismiss(); 
90.                         /** 
91.                          * 刚开始,我自己也不知道ACTION_PICK是干嘛的,后来直接看Intent源码, 
92.                          * 可以发现里面很多东西,Intent是个很强大的东西,大家一定仔细阅读下 
93.                          */
94.      &n
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,