效果图
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); } } }