热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

这篇文章主要介绍了android实现APP中改变头像图片的实例代码,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

具体代码如下所示:

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;
  }
}

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

AndroidManifest.xml:

 

总结

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


推荐阅读
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
author-avatar
晴兮心语6
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有