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:

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

总结

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

(0)

相关推荐

  • Android 编辑头像功能简单实现实例(图片选取,裁剪)

    本文介绍了Android 编辑头像功能的简单实例,可以实现拍照,图片选取,裁剪. 拍照 public static void startCamera(Fragment fragment){ File file=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)+ File.separator+"user_icon.jpg"); Intent intent=new Inten

  • Android个人中心的头像上传,图片编码及截取实例

    首先需要有网络权限,然后我们这里匹配的网络请求是之前封装好的Okhttp. 非常的简单方便,直接复制进去,依赖一下包,然后调用方法即可. 这里是把图片转换成Base64.decode(imageString, Base64.DEFAULT); 转成Base64编码上传.具体内容也不少,需要完全整明白,还是要花点时间慢慢看的. 先看看简单的效果图: 那么万事具备,只欠东风了.直接上代码: public class MainActivity extends AppCompatActivity imp

  • Android实现本地上传图片并设置为圆形头像

    先从本地把图片上传到服务器,然后根据URL把头像处理成圆形头像. 因为上传图片用到bmob的平台,所以要到bmob(http://www.bmob.cn)申请密钥. 效果图: 核心代码: 复制代码 代码如下: public class MainActivity extends Activity {         private ImageView iv;         private String appKey="";                //填写你的Applicatio

  • Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0)

    Feature: 点击选择拍照或者打开相册,选取图片进行裁剪最后设置为圆形头像. Problem: 拍好照片,点击裁剪,弹Toast"无法加载此图片". Solution: 在裁剪的class里加两行代码 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 主要代码如下: public static final S

  • Android实现从本地图库/相机拍照后裁剪图片并设置头像

    玩qq或者是微信的盆友都知道,这些聊天工具里都要设置头像,一般情况下大家的解决办法是从本地图库选择图片或是从相机拍照,然后根据自己的喜爱截取图片.上述过程已经实现好了,最后一步我加上了把截取好的图片在保存到本地的操作,来保存头像.为了大家需要,下面我们小编把完整的代码贴出来供大家参考. 先给大家展示效果图: 代码部分: 布局代码(其实就是两个按钮和一个ImageView来显示头像) <LinearLayout xmlns:android="http://schemas.android.co

  • Android手机拍照或选取图库图片作为头像

    package zhangpgil.photo; import java.io.File; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import android.content.Intent; import

  • Android实现动态圆环的图片头像控件

    先看效果图: 现在大部分的app上难免会使用到圆形头像,所以今天我给大家分享一个单独使用的,并且周围带有圆环动画的花哨圆形头像控件,本控件是在圆形头像控件基础上实现的,只是在其周围再画一些不同大小的圆而已,就可以实现如图的效果. 圆形头像的基本原理是将设置的资源文件转化成Bitmap,然后通过BitmapShader类将Bitmap成为Paint的渲染器,然后在onDraw()中通过canvas.drawCircle(rx,ry,radius,paint);画布上画圆,而这个圆就是形成了圆形头像

  • Android 自定义圆形头像CircleImageView支持加载网络图片的实现代码

    在Android开发中我们常常用到圆形的头像,如果每次加载之后再进行圆形裁剪特别麻烦.所以在这里写一个自定义圆形ImageView,直接去加载网络图片,这样的话就特别的方便. 先上效果图 主要的方法 1.让自定义 CircleImageView 继承ImageView /** * 自定义圆形头像 * Created by Dylan on 2015/11/26 0026. */ public class CircleImageView extends ImageView { } 2.在构造方法中

  • Android通过手机拍照或从本地相册选取图片设置头像

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

  • 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

  • Android直播app送礼物连击动画效果(实例代码)

    最近在做公司的直播项目,需要实现一个观看端连击送礼物的控件: 直接上代码: /** * @author yangyinglong on 2017/7/11 16:52. * @Description: todo(这里用一句话描述这个类的作用) * @Copyright Copyright (c) 2017 Tuandai Inc. All Rights Reserved. */ public class CustomGiftView extends LinearLayout { private

  • Android仿微信朋友圈添加图片的实例代码

    老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧,先把工作完成了,再看也来得及,是吧! 在项目中这种添加图片上传的效果应该是非常常见的,后面有个添加的按钮应该让有些童鞋不知道咋办了吧,其实没那么复杂,通过GridView就可以实现了 先说明一下,这里主要是讲添加图片的效果,至于图片选择器用的是第三方库photopicker,6.0权限用的是第三方库EasyPermission 1.首先这是用GridView实现的 <?xml version="1.0"

  • Android中复制图片的实例代码

    activity_main.xml中的配置 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&quo

  • Android在一个app中安装并卸载另一个app的示例代码

    Android在一个app中安装并卸载另一个app 1.在app→src→main下新建文件夹asserts,将准备安装的apk文件放在asserts内 2.在app→src→main→res下新建文件夹xml,右击xml文件夹,选择new→XML Resource File,File name为文件名,可随意,本文中为filepaths:Root element为资源类型,输入paths,确定并编辑以下代码: <?xml version="1.0" encoding="

  • Android 中NumberPicker,DatePicker与DatePickerDialog中分割颜色的修改实例代码

    Android 中NumberPicker,DatePicker与DatePickerDialog中分割颜色的修改实例代码 前言: 开发中,为了应用整体美观,需要保持控件的色调和主题色保持一致, 例如:NumberPicker.DatePicker和DatePickerDialog的分割线颜色 一.NumberPicker的分割线颜色 我把对NumberPicker分割线颜色的方法写在一个工具类中,便于全局调用,代码如下: public static void setNumberPickerDi

  • java后台接收app上传的图片的示例代码

    整理文档,搜刮出一个java后台接受app上传的图片的示例代码,稍微整理精简一下做下分享 package com.sujinabo.file; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servlet.S

  • IOS 中CALayer绘制图片的实例详解

    IOS 中CALayer绘制图片的实例详解 CALayer渲染内容图层.与UIImageView相比,不具有事件响应功能,且UIImageView是管理内容. 注意事项:如何使用delegate对象执行代理方法进行绘制,切记需要将delegate设置为nil,否则会导致异常crash. CALayer绘制图片与线条效果图: 代码示例: CGPoint position = CGPointMake(160.0, 200.0); CGRect bounds = CGRectMake(0.0, 0.0

  • Android中实现图文并茂的按钮实例代码

    效果图如下所示: 代码: <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:gravity="center" android:background="#8

  • android 获取APP的唯一标识applicationId的实例

    使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 方式一 int indentify = getResources().getIdentifier("com.test.demo:drawable/icon",null,null); 第一个参数格式是:包名 + : +资源文件夹名 + / +资源名:是这种格式 然后其他的可以为null 方式二 intindentify= getResources().getIdentifier("icon"

随机推荐