设置头像且调用手机中的图片编辑器

下面直接来看下主控制类代码

  1. import java.io.File;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.drawable.BitmapDrawable;
    import android.graphics.drawable.Drawable;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    /**
     * @Title: PicCutDemoActivity.java
     * @Package com.xiaoma.piccut.demo
     * @Description: 图片裁剪功能测试
     * @author XiaoMa
     */
    public class PicCutDemoActivity extends Activity implements OnClickListener {    
    
        private ImageButton ib = null;
        private ImageView iv = null;
        private Button btn = null;
        private String tp = null;    
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //初始化
            init();
        }    
    
        /**
         * 初始化方法实现
         */
        private void init() {
            ib = (ImageButton) findViewById(R.id.imageButton1);
            iv = (ImageView) findViewById(R.id.imageView1);
            btn = (Button) findViewById(R.id.button1);
            ib.setOnClickListener(this);
            iv.setOnClickListener(this);
            btn.setOnClickListener(this);
        }    
    
        /**
         * 控件点击事件实现
         *
         * 因为有朋友问不同控件的背景图裁剪怎么实现,
         * 我就在这个地方用了三个控件,只为了自己记录学习
         * 大家觉得没用的可以跳过啦
         */
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.imageButton1:
                ShowPickDialog();
                break;
            case R.id.imageView1:
                ShowPickDialog();
                break;
            case R.id.button1:
                ShowPickDialog();
                break;    
    
            default:
                break;
            }
        }    
    
        /**
         * 选择提示对话框
         */
        private void ShowPickDialog() {
            new AlertDialog.Builder(this)
                    .setTitle("设置头像...")
                    .setNegativeButton("相册", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                            /**
                             * 刚开始,我自己也不知道ACTION_PICK是干嘛的,后来直接看Intent源码,
                             * 可以发现里面很多东西,Intent是个很强大的东西,大家一定仔细阅读下
                             */
                            Intent intent = new Intent(Intent.ACTION_PICK, null);    
    
                            /**
                             * 下面这句话,与其它方式写是一样的效果,如果:
                             * intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                             * intent.setType(""image/*");设置数据类型
                             * 如果朋友们要限制上传到服务器的图片类型时可以直接写如:"image/jpeg 、 image/png等的类型"
                             * 这个地方小马有个疑问,希望高手解答下:就是这个数据URI与类型为什么要分两种形式来写呀?有什么区别?
                             */
                            intent.setDataAndType(
                                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                    "image/*");
                            startActivityForResult(intent, 1);    
    
                        }
                    })
                    .setPositiveButton("拍照", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            dialog.dismiss();
                            /**
                             * 下面这句还是老样子,调用快速拍照功能,至于为什么叫快速拍照,大家可以参考如下官方
                             * 文档,you_sdk_path/docs/guide/topics/media/camera.html
                             * 我刚看的时候因为太长就认真看,其实是错的,这个里面有用的太多了,所以大家不要认为
                             * 官方文档太长了就不看了,其实是错的,这个地方小马也错了,必须改正
                             */
                            Intent intent = new Intent(
                                    MediaStore.ACTION_IMAGE_CAPTURE);
                            //下面这句指定调用相机拍照后的照片存储的路径
                            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
                                    .fromFile(new File(Environment
                                            .getExternalStorageDirectory(),
                                            "xiaoma.jpg")));
                            startActivityForResult(intent, 2);
                        }
                    }).show();
        }    
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
            // 如果是直接从相册获取
            case 1:
                startPhotoZoom(data.getData());
                break;
            // 如果是调用相机拍照时
            case 2:
                File temp = new File(Environment.getExternalStorageDirectory()
                        + "/xiaoma.jpg");
                startPhotoZoom(Uri.fromFile(temp));
                break;
            // 取得裁剪后的图片
            case 3:
                /**
                 * 非空判断大家一定要验证,如果不验证的话,
                 * 在剪裁之后如果发现不满意,要重新裁剪,丢弃
                 * 当前功能时,会报NullException,小马只
                 * 在这个地方加下,大家可以根据不同情况在合适的
                 * 地方做判断处理类似情况
                 *
                 */
                if(data != null){
                    setPicToView(data);
                }
                break;
            default:
                break;    
    
            }
            super.onActivityResult(requestCode, resultCode, data);
        }    
    
        /**
         * 裁剪图片方法实现
         * @param uri
         */
        public void startPhotoZoom(Uri uri) {
            /*
             * 至于下面这个Intent的ACTION是怎么知道的,大家可以看下自己路径下的如下网页
             * yourself_sdk_path/docs/reference/android/content/Intent.html
             * 直接在里面Ctrl+F搜:CROP ,之前小马没仔细看过,其实安卓系统早已经有自带图片裁剪功能,
             * 是直接调本地库的,小马不懂C C++  这个不做详细了解去了,有轮子就用轮子,不再研究轮子是怎么
             * 制做的了...吼吼
             */
            Intent intent = new Intent("com.android.camera.action.CROP");
            intent.setDataAndType(uri, "image/*");
            //下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
            intent.putExtra("crop", "true");
            // aspectX aspectY 是宽高的比例
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
            // outputX outputY 是裁剪图片宽高
            intent.putExtra("outputX", 150);
            intent.putExtra("outputY", 150);
            intent.putExtra("return-data", true);
            startActivityForResult(intent, 3);
        }    
    
        /**
         * 保存裁剪之后的图片数据
         * @param picdata
         */
        private void setPicToView(Intent picdata) {
            Bundle extras = picdata.getExtras();
            if (extras != null) {
                Bitmap photo = extras.getParcelable("data");
                Drawable drawable = new BitmapDrawable(photo);    
    
                /**
                 * 下面注释的方法是将裁剪之后的图片以Base64Coder的字符方式上
                 * 传到服务器,QQ头像上传采用的方法跟这个类似
                 */   
    
                /*ByteArrayOutputStream stream = new ByteArrayOutputStream();
                photo.compress(Bitmap.CompressFormat.JPEG, 60, stream);
                byte[] b = stream.toByteArray();
                // 将图片流以字符串形式存储下来   
    
                tp = new String(Base64Coder.encodeLines(b));
                /**这个地方大家可以写下给服务器上传图片的实现,直接把tp直接上传就可以了,
                *服务器处理的方法是服务器那边的事了,吼吼   
    
                *如果下载到的服务器的数据还是以Base64Coder的形式的话,可以用以下方式转换
                *为我们可以用的图片类型就OK啦...吼吼  */
                Bitmap dBitmap = BitmapFactory.decodeFile(tp);
                Drawable drawable = new BitmapDrawable(dBitmap);
                */
                ib.setBackgroundDrawable(drawable);
                iv.setBackgroundDrawable(drawable);
            }
        }    
    
    }  

最后,小DEMO源码此下载:http://mzh3344258.blog.51cto.com/blog/1823534/808837

时间: 2025-01-02 03:42:36

设置头像且调用手机中的图片编辑器的相关文章

Android调用手机中的应用市场,去评分的功能实现

在我们常常使用的软件当中,我们经常可以看到在软件的设置界面,有一个功能那就是去评分的功能,只要我们一点击“去评分”就会调用手机中的应用市场软件.一开始我以为这个功能的实现是要遍历整个手机中的软件包名,去匹配市场上的大多数应用市场软件呢,这个方法一看就非常麻烦.之后,经过研究才发现其实这个功能实现非常简单. 四行代码就能实现,就能够调用出您手机上所安装的所有应用市场. 代码如下: Uri uri = Uri.parse("market://details?id="+getPackageN

Android调用相机实现拍照并裁剪图片,调用手机中的相冊图片并裁剪图片

在 Android应用中,非常多时候我们须要实现上传图片,或者直接调用手机上的拍照功能拍照处理然后直接显示并上传功能,以下将讲述调用相机拍照处理图片然后显示和调用手机相冊中的图片处理然后显示的功能,要想实现上传功能.一般都是上传到数据库中,将imageView中的图片取出来然后存到数据库中就可以. 以下讲述实现的步骤: 1. 调用相冊中的图片裁剪然后显示. 1.1 使用Intent获取从相冊中选择的照片. 1.2 对获取的图片进行裁剪处理.裁剪处理也是使用Intent调用的Android自带的裁

ios最新调用手机相册选取头像(UIActionSheet过期)

由于 UIActionSheet过期所以可以使用如下调用手机相册 前提不要忘记添加代理如下两个 UIImagePickerControllerDelegate,UINavigationControllerDelegate 还需要去plist文件里面添加相机相册权限否则要崩溃的哟 //更换头像 - (IBAction)changeHeadIM:(id)sender { //创建UIImagePickerController对象,并设置代理和可编辑 UIImagePickerController *

Android设置头像,手机拍照或从本地相册选取图片作为头像

 [Android设置头像,手机拍照或从本地相册选取图片作为头像] 像微信.QQ.微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 1,让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像. 2,让用户启动手机的相机拍照,拍完照片后裁剪,然后作为头像. 我现在写一个简单的完整代码例子,说明如何在Android中实现上述两个头像设置功能. MainActivity.java文件: package zhangpgil.photo; import java.io.F

调用系统拍照和在系统图库选择照片设置头像

先上代码: package com.create.intenttest; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.Med

Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果

首先我们先看第一个界面吧,使用将手机中的图片扫描出来,然后根据图片的所在的文件夹将其分类出来,并显示所在文件夹里面的一张图片和文件夹中图片个数,我们根据界面元素(文件夹名, 文件夹图片个数,文件夹中的一张图片)使用一个实体对象ImageBean来封装这三个属性 package com.example.imagescan; /** * GridView的每个item的数据对象 * * @author len * */ public class ImageBean{ /** * 文件夹的第一张图片路

浏览器端javascript调用手机终端本地功能实现02-功能点汇总

上篇博文已经说明,本篇直接进入主题.本篇大致说明总体功能以及代码用途,下篇将功能点逐一详细说明. 功能点包括: 拍照相关接口(camera) 功能函数名称 作用 备注 invokeCamera() 调用摄像头拍照 requestAlbum() 调用相册功能 requestAlbumMulti() 相册多选 requestAlbumMultiUpload() 相册多选完后上传 2. 录音相关接口(media) 功能函数名称 作用 备注 startRecord() 录制音频 stopRecord()

拍照保存(调用手机),对话框的自定义样式

主页面布局文件很简单就是一个按钮弹出对话框,一个imageView显示选择的图片. 我给大家提供了下载代码在这个网页:http://download.csdn.net/download/u011348453/7669871 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/r

浏览器端javascript调用手机终端本地功能实现03-拍照

上篇大致说明了已实现的功能点及大致的实现方式,本篇详细说明如何通过js调用拍照的相关功能. js代码部分已经在<浏览器端javascript调用手机终端本地功能实现02>中展现,主要说明android部分和ios部分的实现.请将js代码或文件放在要加载的服务器页面里. android端实现 1 //定义拍照相关接口 2 private JSInterfaceCamera jsInterfaceCamera; 3 //初始化 4 jsInterfaceCamera=new JSInterface