android 实现APP中改变头像图片的实例代码

作者:落_红 时间:2021-11-02 20:39:58 

具体代码如下所示:


package com.example.studyapplication.fragment;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
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.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.text.style.URLSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.studyapplication.MainActivity;
import com.example.studyapplication.R;
import com.example.studyapplication.wode_Activity;
import com.example.studyapplication.zhubanfangActivity;
import com.example.studyapplication.zhuceActivity;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
import static android.app.Activity.RESULT_OK;
public class WodeFragment extends Fragment implements View.OnClickListener {
 private View mView;
 private Context mAvtivity;
 Button youhuiquan;
 Button shoucang;
 Button guanzhu;
 ImageView shezhi;
 ImageView xiaoxi;
 TextView qiehuanweizhuban;
 static  TextView denglu;
 LinearLayout daifukuan;
 LinearLayout daicanyu;
 LinearLayout tuikuan;
 LinearLayout yiwancheng;
 LinearLayout qingxiandenglu;
 LinearLayout log;
 LinearLayout quanbudingdan;
 private Button LL01,LL02,LL03;
 private Context mContext;
 private ImageButton touxiang;
 private Bitmap head;// 头像Bitmap
 private static String path = "/sdcard/myHead/";// sd路径
 Activity mActivity;
 Uri uritempFile;
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   mView = inflater.inflate(R.layout.wode_layout, null);
   mActivity=this.getActivity();
   //设置布局文件5888
   return mView;
 }
 @Override
 public void onCreate(@Nullable Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   this.mContext = getActivity();
 }
   /*
   点击头像进行更换头像
    */
   touxiang.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
       switch (v.getId()) {
         case R.id.touxiang:// 更换头像
           showTypeDialog();
           break;
       }
     }
   });
 }
 private void initView() {
   LL01=(Button)getActivity().findViewById(R.id.youhuiquan);
   LL02=(Button) getActivity().findViewById(R.id.shoucang);
   LL03=(Button)getActivity().findViewById(R.id.guanzhu);
   touxiang = (ImageButton)getActivity().findViewById(R.id.touxiang);
   Bitmap bt = BitmapFactory.decodeFile(path + "log.png");// 从SD卡中找头像,转换成Bitmap
   if (bt != null) {
     @SuppressWarnings("deprecation")
     Drawable drawable = new BitmapDrawable(bt);// 转换成drawable
     touxiang.setImageDrawable(drawable);
   } else {
     /**
      * 如果SD里面没有则需要从服务器取头像,取回来的头像再保存在SD中
      *
      */
   }
 }
 private void showTypeDialog() {
   //显示对话框
   AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
   final AlertDialog dialog = builder.create();
   View view = View.inflate(getActivity(), R.layout.dialog_select_photo, null);
   TextView tv_select_gallery = (TextView) view.findViewById(R.id.tv_select_gallery);
   TextView tv_select_camera = (TextView) view.findViewById(R.id.tv_select_camera);
   tv_select_gallery.setOnClickListener(new View.OnClickListener() {// 在相册中选取
     @Override
     public void onClick(View v) {
       Intent intent1 = new Intent(Intent.ACTION_PICK, null);
       //打开文件
       intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/log.png");
       startActivityForResult(intent1, 1);
        dialog.dismiss();
     }
   });
   tv_select_camera.setOnClickListener(new View.OnClickListener() {// 调用照相机
     @Override
     public void onClick(View v) {
       Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
       intent2.putExtra(MediaStore.EXTRA_OUTPUT,
           Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "log.png")));
       startActivityForResult(intent2, 2);// 采用ForResult打开
       dialog.dismiss();
     }
   });
   dialog.setView(view);
   dialog.show();
 }
 @Override
 public void onActivityResult(int requestCode, int resultCode, Intent data) {
   switch (requestCode) {
     case 1:
       if (resultCode == RESULT_OK) {// 如果返回码是可以用的
         cropPhoto(data.getData());// 裁剪图片
       }
       break;
     case 2:
       if (resultCode == RESULT_OK) {
         File temp = new File(Environment.getExternalStorageDirectory() + "/head.jpg");
         cropPhoto(Uri.fromFile(temp));// 裁剪图片
       }
       break;
     case 3:
       if (data != null) {
         Uri extras = data.getData();
         //head = extras.getParcelable("data");
         try {
           head=BitmapFactory.decodeStream(mActivity.getContentResolver().openInputStream(uritempFile));
         } catch (FileNotFoundException e) {
           e.printStackTrace();
         }
         if (head != null) {
           /**
            * 上传服务器代码
            */
           // 让刚才选择裁剪得到的图片显示在界面上
           setPicToView(head);// 保存在SD卡中
           touxiang.setImageBitmap(head);// 用ImageButton显示出来
         }
       }
       break;
     default:
       break;
   }
   super.onActivityResult(requestCode, resultCode, data);
 }
 /**
  * 调用系统的裁剪功能
  *
  * @param uri
  */
 public void cropPhoto(Uri uri) {
   if(uri== null){
     Log.i("tag","The uri is not exist.");
   }
   Intent intent = new Intent("com.android.camera.action.CROP");
   intent.setDataAndType(uri, "image/*.png");
   //设置裁剪
   intent.putExtra("crop", "true");
   // aspectX aspectY 是宽高的比例
   intent.putExtra("aspectX", 1);
   intent.putExtra("aspectY", 1);
   // outputX outputY 是裁剪图片宽高
   intent.putExtra("outputX", 250);
   intent.putExtra("outputY", 250);
   intent.putExtra("return-data", true);
   uritempFile = Uri.parse("file:///sdcard/temp.jpg");//重要,android4.0以上,本地地址前都加file://+/
   // uritempFile=uri;
   intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile);
   intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
   startActivityForResult(intent, 3);
 }
 private void setPicToView(Bitmap mBitmap) {
   String sdStatus = Environment.getExternalStorageState();
   if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
     return;
   }
   FileOutputStream b = null;
   File file = new File(path);
   file.mkdirs();// 创建文件夹
   String fileName = path + "log.png";// 图片名字
   try {
     b = new FileOutputStream(fileName);
     mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   } finally {
     try {
       // 关闭流
       b.flush();
       b.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
 }
//生成圆角图片-------未使用
 private Bitmap getRoundedCornerBitmap(Bitmap bitmap){
   Bitmap roundBitMap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Bitmap.Config.ARGB_8888);
   Canvas canvas =new Canvas(roundBitMap);
   int color=0xff424242;
   Paint paint=new Paint();
   //设置圆形半径
   int radius;
   if( bitmap.getWidth()>bitmap.getHeight()){
     radius=bitmap.getHeight()/2;
   }else {
     radius=bitmap.getWidth()/2;
   }
   //绘制圆形
   paint.setAntiAlias(true);
   canvas.drawARGB(0,0,0,0);
   paint.setColor(color);
   canvas.drawCircle(bitmap.getWidth()/2,bitmap.getHeight()/2,radius,paint);
   paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
   canvas.drawBitmap(bitmap,0,0,paint);
   return roundBitMap;
 }
}

注意:手机权限一定要设置,这个非常重要

android 实现APP中改变头像图片的实例代码

AndroidManifest.xml:


<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"  tols:ignore="ProtectedPermissions" />

总结

以上所述是小编给大家介绍的android 实现APP中改变头像图片的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

来源:https://blog.csdn.net/weixin_37438128/article/details/90749194

标签:android,头像,图片
0
投稿

猜你喜欢

  • C#实现简单的聊天窗体

    2022-11-09 03:25:13
  • java微信公众号支付开发之现金红包

    2023-09-01 17:28:38
  • 使用JMX监控Zookeeper状态Java API

    2023-05-14 02:27:26
  • SpringBoot 配置文件加密的步骤

    2023-10-23 02:55:55
  • Java使用WatchService监控文件内容变化的示例

    2023-02-15 10:10:19
  • 详细介绍idea如何设置类头注释和方法注释(图文)

    2022-05-08 20:22:41
  • 浅谈Silverlight 跨线程的使用详解

    2021-10-16 01:23:05
  • C# 反射与 Quartz 实现流程处理详情

    2022-11-11 09:11:07
  • Java BigDecimal案例详解

    2021-09-15 12:03:43
  • C# double和decimal数据类型以截断的方式保留指定的小数位数

    2021-12-09 02:19:04
  • Java C++ 算法题解拓展leetcode670最大交换示例

    2022-05-18 23:31:51
  • Android中Matrix用法实例分析

    2023-07-07 18:40:22
  • c#实现pdf的另存为功能

    2022-05-13 22:07:49
  • springmvc视图解析流程代码实例

    2023-02-14 04:33:39
  • 极简的Resty服务端和客户端RESTful框架

    2022-01-19 19:51:00
  • spring定时任务执行两次及tomcat部署缓慢问题的解决方法

    2022-12-27 09:53:25
  • SpringBoot拦截器的配置使用介绍

    2021-06-20 07:25:54
  • java web手写实现分页功能

    2022-02-04 02:23:15
  • Android学习笔记--使用剪切板在Activity中传值示例代码

    2022-12-21 13:43:58
  • C# Directory.GetFiles()函数案例详解

    2022-12-10 04:51:02
  • asp之家 软件编程 m.aspxhome.com