Android -- 顯示圓形頭像
一. 前言
這章將從相簿和拍照獲取圖片,並顯示成圓形圖片。
二. 準備
首先需要做一個圓形的顯示區域,我用的是CircleImageView開源庫
CircleImageView原始碼地址:https://github.com/hdodenhof/CircleImageView
(1)下載CircleImageView原始碼
(2)將CircleImageView.class新增到你的專案中,一般存在工具類中
(3)新增後會出現一些錯誤資訊,這時我們需要將CircleImageView原始碼包中res/values/attrs.xml新增到我們的res/values下
注:attrs.xml中的引數與CircleImageView.class有關聯,所有要修改就一起改。
三. 實現
activity.xml佈局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <com.jmg.utils.CircleImageView注:這裡需要新增xmlns.app,不然會報錯。手敲app後選擇第二個自動匯入。android:id="@+id/touxiang" android:layout_width="150dp" android:layout_height="150dp" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:src="@mipmap/logo_image" app:civ_border_width="2dp" app:civ_border_color="@color/colorBlack" /> </RelativeLayout>
MainActivity.xml
import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import com.jmg.utils.CircleImageView; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class MainActivity extends AppCompatActivity { private CircleImageView imageView; private Bitmap head;// 頭像Bitmap private static String path = "/sdcard/myHead/";// sd路徑 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (CircleImageView) findViewById(R.id.touxiang); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showTypeDialog(); } }); } @Override protected 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) { Bundle extras = data.getExtras(); head = extras.getParcelable("data"); if (head != null) { setPicToView(head);// 儲存在SD卡中 imageView.setImageBitmap(head);// 用ImageButton顯示出來 } } break; default: break; } super.onActivityResult(requestCode, resultCode, data); } private void showTypeDialog() { //顯示對話方塊 AlertDialog.Builder builder = new AlertDialog.Builder(this); final AlertDialog dialog = builder.create(); View view = View.inflate(this, R.layout.dialog_select, 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/*"); 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(), "head.jpg"))); startActivityForResult(intent2, 2);// 採用ForResult開啟 dialog.dismiss(); } }); dialog.setView(view); dialog.show(); } /** * 呼叫系統的裁剪功能 * * @param uri */ public void cropPhoto(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); 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); 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 + "head.jpg";// 圖片名字 try { b = new FileOutputStream(fileName); mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把資料寫入檔案 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { // 關閉流 if (b != null) { b.flush(); b.close(); } } catch (IOException e) { e.printStackTrace(); } } } }注:新增以上如果在android 7.0系統執行會出現奔潰
新增MyApplication.class
import android.app.Application; import android.os.StrictMode; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // android 7.0系統解決拍照的問題 StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build()); builder.detectFileUriExposure(); } }
然後再AndroidManifest.xml中新增
<application android:name=".MyApplication" //新增這一行
後續還會新增各手機獲取相簿圖片或拍照會出現的問題及解決辦法。
The End!
每天進步一點點!
相關推薦
Android -- 顯示圓形頭像
一. 前言這章將從相簿和拍照獲取圖片,並顯示成圓形圖片。二. 準備首先需要做一個圓形的顯示區域,我用的是CircleImageView開源庫CircleImageView原始碼地址:https://github.com/hdodenhof/CircleImageView(1)
Android之圓形頭像(實現相機拍攝+相簿選擇+圖片裁剪功能)
功能實現:點選圓形頭像之後可以實現相簿上傳或者開啟相機,然後把得到的圖片經過剪裁,把剪裁過的圖片設定為頭像的背景圖 步驟:第一步:自定義一個類,繼承ImageView,重寫draw方法,實現外觀為圓形 第二步:在xml檔案中引用該控制元件 第三步:實現圓形頭像的點選事件,點
android 載入圓形頭像框
Glide.with(PersonalActivity.this).load(userInfo.getAlbum()).transform(new CircleTransform(PersonalActivity.this)).into(mHeadimg);//頭像 /
android通訊聯絡QuickContactBadge 圓形頭像顯示詳解
QuickContactBadge 在使用該類: 注意需要android.permission.READ_CONTACTS許可權,並且聯絡人裡面有資料,並且聯絡人需要有手機號碼,不然出來是一個空的 三、公共方
【Android】自己定義圓形ImageView(圓形頭像 可指定大小)
代碼實現 err float avi rim war tor pos dsm 近期在仿手Q的UI,這裏面常常要用到的就是圓形頭像,看到 在android中畫圓形圖片的幾種辦法 這篇文章,了解了制作這樣的頭像的原理.只是裏面提供的方法另一個不足的地方就是
Android把Glide載入的圖片變為圓形頭像
Android把Glide載入的圖片變為圓形頭像 原圖: 效果圖: 新增依賴: compile 'com.github.bumptech.glide:glide:3.7.0' 程式碼實現: Glide.with(getContext()).load("http://ww
android自定義圓形頭像
轉載請註明出處:https://blog.csdn.net/u011038298/article/details/84637788 import android.content.Context; import android.content.res.TypedArray; impo
輕量級顯示圓形圖片 CircleView-Android
CircleView-Android 詳細介紹 CircleView,可以將圖片圓形顯示的View,實現方式很簡單,做這個控制元件就是為了可以直接方便的顯示圓形圖片,在顯示的時候,提供了更多的選擇,比如下面講到的偏移顯示。 使用方法 在build.gradle檔案中加上
android圓形頭像、圖片
public static Bitmap toRoundImage(Bitmap bitmap) { float roundPx = 0; int rectStartX=0; int rectStartY=0; Bitmap output = Bitmap.crea
Android絕對佈局 登陸介面 圓形頭像
絕對佈局:通過直接給定控制元件起始座標 ( x , y ) 和 ( w , l ) ,來生成控制元件。 圓形頭像:CircleImageView的使用 注:在build.gradle中新增: imp
Android實現使用者圓形頭像+背景模糊
效果呈現: 新增依賴: //圖片載入框架 implementation 'com.github.bumptech.glide:glide:3.7.0' implementation 'jp.wasabeef:glide-transform
Android使用CircleImageView實現圓形頭像
一般做社交類APP,包括其他很多隻要有個人頁面的基本都會有設定頭像的這個功能,而且大多數也是圓形的頭像,顯的也比較美觀,github上有很多別人的第三方工具類,今天沒事就自己研究了一下看了看原始碼,下面附上程式碼。 自定義ViewCircleImageView
Android 頭像上傳 相機+相簿 繪製圓形頭像
老話常談,在開始之前來幾張圖,看看效果: 主介面: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://
《Android開發卷——設定圓形頭像,Android擷取圓形圖片》
在有一些程式開發中,有時候會用到圓形,擷取一張圖片的一部分圓形,作為頭像或者其他. 本例項就是截圖圓形,設定頭像的. 首先講解一些程式碼 <ImageView android:id="@+id/screenshot_img" android:lay
android 解決在列表條目中重新整理或者載入 Glide 圓形頭像會閃爍,位置錯亂
剛開始以為是listview或者Recyclerview的快取複用問題,結果研究了半天才知道是Glide圓形頭像CircleImageView的問題。 直接貼程式碼,程式碼很簡單,直接在Recyclerview的onBinderViewHolder裡面或者Li
Android自定義控制元件之圓形頭像
重寫ImageView public class CircleImageView extends ImageView { private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; p
android圓形頭像:相機裁剪+相簿選擇
這裡我們呼叫的都是系統提供的類,所以使用起來非常簡單; 每次點選圓形頭像都會彈出一個PopupWindow,可以點選“拍照”,“手機相簿”和"取消"; 1,當點選"拍照"時開啟系統拍照頁面,拍照完成 成功接收圖片以後 攜帶資料 開啟 圖片裁剪頁面,裁剪完成 成功接收圖片
android 手把手教你繪製圓形頭像
自從騰訊QQ中的圓形頭像,火了起來後,現在我們在一些應用中都能看到圓形頭像的身影,在個人主頁或者個人資料面板中使用圓形頭像,會使整個佈局變得更加優雅 現在我們來進行第一步,建立一個繼承ImageV
Android 圓形頭像的兩種實現方式
前言 這篇部落格只是為了做一個記錄而已,方便而後查詢,核心程式碼都是直接採用鴻洋部落格裡面的程式碼的。 圓形頭像在實際開發中實際很常見,一般來說,主要有兩種實現方式: 第一種: 使用 Paint 的 Xfermode 實戰 第二種方法: 使用 B
Android自定義View之圓形頭像
記錄貼 現在製作圓形頭像的第三方工具已經很多了,本帖只為記錄自定義view學習過程。 1.主體程式碼部分 public class CirclePhotoView extends View { private int max;//最大進度 private