小Dome04:实现Fresco上传本地头像+日期选择器功能(+Android6.0版本动态权限)

效果图

build.gradle:

//fresco
compile 'com.facebook.fresco:fresco:0.12.0'
compile 'com.facebook.fresco:animated-base-support:0.12.0'
compile 'com.android.support:design:27.+'
// 支持 GIF 动图,需要添加
compile 'com.facebook.fresco:animated-gif:0.12.0'
// 支持 WebP (静态图+动图),需要添加
compile 'com.facebook.fresco:animated-webp:0.12.0'
compile 'com.facebook.fresco:webpsupport:0.12.0'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

<application
    android:name=".app"

app初始化:

public class app extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

布局:

activity_main.xml:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:text="头像"
        android:padding="20dp"
        android:textSize="26sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"/>

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/Phone"
        android:layout_width="108dp"
        android:layout_height="108dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        fresco:roundAsCircle="true"
        fresco:failureImage="@drawable/ic_launcher_background"
        android:padding="20dp" />

</RelativeLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#909090" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:text="用户名"
        android:padding="5dp"
        android:textSize="26sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:text="190568_m"
        android:textSize="20dp"
        android:textColor="#000000"
        android:gravity="center_vertical"
        android:layout_alignParentRight="true" />

</RelativeLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#909090" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:text="昵称"
        android:padding="5dp"
        android:textSize="26sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:text="丁壳"
        android:textSize="20dp"
        android:textColor="#000000"
        android:gravity="center_vertical"
        android:layout_alignParentRight="true" />

</RelativeLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#909090" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:text="性别"
        android:padding="5dp"
        android:textSize="26sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:text="男"
        android:textSize="20dp"
        android:textColor="#000000"
        android:gravity="center_vertical"
        android:layout_alignParentRight="true" />

</RelativeLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#909090" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:text="出生日期"
        android:padding="5dp"
        android:textSize="26sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"/>

    <EditText
        android:id="@+id/updatadate"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:text="1990年8月15日"
        android:textSize="20dp"
        android:textColor="#000000"
        android:inputType="none"
        android:background="#fff"
        android:gravity="center_vertical"
        android:layout_alignParentRight="true" />

</RelativeLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#909090" />

phone_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <Button
        android:id="@+id/btn_01"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="拍照"/>

    <Button
        android:id="@+id/btn_02"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="相册"/>

</LinearLayout>

MainActivity代码:

import android.Manifest;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;

import com.facebook.drawee.view.SimpleDraweeView;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    //读写权限
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};
    //请求状态码
    private static int REQUEST_PERMISSION_CODE = 1;

    private SimpleDraweeView Phone;
    private EditText updatadate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //判断当前系统是否是Android6.0(对应API 23)以及以上
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE);
            }
        }
        //初始化控件
        Phone = findViewById(R.id.Phone);
        updatadate = findViewById(R.id.updatadate);
        initView();
    }

    //回调函数
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_PERMISSION_CODE) {
            for (int i = 0; i < permissions.length; i++) {
                Log.i("MainActivity", "申请的权限为:" + permissions[i] + ",申请结果:" + grantResults[i]);
            }
        }
    }


    private void initView() {
        //点击弹框提示拍照或相册
        Phone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                final AlertDialog dialog = builder.create();
                View dialogView = View.inflate(MainActivity.this, R.layout.phone_item, null);
                dialog.setView(dialogView);
                Button btn_01 = dialogView.findViewById(R.id.btn_01);
                Button btn_02 = dialogView.findViewById(R.id.btn_02);
                btn_01.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //调用系统的拍照页面----隐式跳转
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        //开启activity
                        startActivityForResult(intent, 999);
                    }
                });
                btn_02.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        // 通过隐式跳转的方式,,去打开相册
                        Intent intent = new Intent(Intent.ACTION_PICK);
                        // 取出相册图片 需要只指定类型
                        intent.setType("image/*");
                        startActivityForResult(intent, 1000);
                    }
                });
                dialog.show();
            }
        });
        //点击日期弹框修改日期
        updatadate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //不显示系统输入键盘
                updatadate.setInputType(InputType.TYPE_NULL);
                updatadate.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                    @Override
                    public void onFocusChange(View v, boolean hasFocus) {
                        // TODO Auto-generated method stub
                        if(hasFocus){
                            Calendar c = Calendar.getInstance();
                            new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                                @Override
                                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                    // TODO Auto-generated method stub
                                    updatadate.setText(year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日");
                                }
                            }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();
                        }
                    }
                });
                Calendar c = Calendar.getInstance();
                new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        // TODO Auto-generated method stub
                        updatadate.setText(year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日");
                    }
                }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();
            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==999&&resultCode==RESULT_OK) {
            //可用接收回传的数据----取出的资源类型是  bitmap
            Bitmap bitmap = data.getParcelableExtra("data");
            //设置给图片
            Phone.setImageBitmap(bitmap);
        }
        if (requestCode == 1000 && resultCode == RESULT_OK) {
            //取出数据,。。。并回显
            Uri uri = data.getData();
            Phone.setImageURI(uri);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/QQ849410011/article/details/82823307