編輯:Android編程入門
我們常常會用到上傳頭像,或者發帖子的時候選擇本地圖片上傳的功能.這個很常見
今天因為app的需求我研究了下.現在分享下.
其實不論是通過拍照還是從相冊選取都會用到Intent
這是系統提供給我們用來調用系統方法的好用工具!
首先,需要設計下我們想怎麼調用系統的拍照或者選取圖片的方法
我們可以點擊頭像或者一個按鈕然後彈出一個對話框,讓用戶自己
選擇是拍照還是選擇圖片(如下圖)
.
那這個對話框怎麼寫呢.通過AlertDialog來實現(我們就給這個方法起名叫dialog):
//對頭像操作
private void dialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("提示");
builder.setMessage("請選擇修改頭像方式");
//調用相機拍照
builder.setPositiveButton("拍照", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
takePhoto();
}
});
//從相冊裡面取照片
builder.setNegativeButton("相冊", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
pickPhoto();
}
});
builder.create().show();
}
然後就要實現拍照和相冊選擇功能(通過intent):
/**
* 拍照獲取圖片
*/
private void takePhoto() {
//執行拍照前,應該先判斷SD卡是否存在
String SDState = Environment.getExternalStorageState();
if (SDState.equals(Environment.MEDIA_MOUNTED)) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//"android.media.action.IMAGE_CAPTURE"
/***
* 需要說明一下,以下操作使用照相機拍照,拍照後的圖片會存放在相冊中的
* 這裡使用的這種方式有一個好處就是獲取的圖片是拍照後的原圖
* 如果不實用ContentValues存放照片路徑的話,拍照後獲取的圖片為縮略圖不清晰
*/
ContentValues values = new ContentValues();
photoUri = this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
// intent.putExtra("uri" , photoUri);
/**-----------------*/
startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
} else {
Toast.makeText(this, "內存卡不存在", Toast.LENGTH_LONG).show();
}
}
/***
* 從相冊中取圖片
*/
private void pickPhoto() {
//AndroidImagePicker.getInstance().setSelectMode(AndroidImagePicker.Select_Mode.MODE_MULTI);
Intent intent = new Intent(Intent.ACTION_PICK, null);
//通過Intent 篩選所有的圖片
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, REQ_IMAGE);
}
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);調用系統拍照的功能
通過重寫onActivityResult的方法獲取通過
startActivityForResult()傳來的信息(主要是拍照圖片的uri).
獲取該uri:
Uri uri = data.getData();
獲取了uri後就可以給相應的控件設置背景.比如(是給頁面設置背景):
bt = MediaStore.Images.Media.getBitmap(this.getContentResolver() , uri); im.setImageBitmap(bt);
bt是Bitmap類型im是ImageView類型並且已經綁定控件.
在startActivityForResult()的參數中包含了(Intent data 改參數主要存放選中或者拍照的uri)
Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
這兩句就是調用系統圖片選擇的方法.同樣通過 startActivityForResult()傳遞參數
startActivityForResult(Intent , int)
這個方法與onActivityResult()配套使用
它的第一個參數用來傳遞intetn信息 , 第二個參數是自己定義的常量用來唯一標識他的intent
onActivityResult()的第二個參數即是這個唯一標識.第三個參數是intent信息.
就是這些.關於onActivityResult()的具體參數信息可以自行查文檔或者百度.
Android 自定義ViewGroup的步驟
前面幾節,我們重點討論了自定義View的三板斧,這節我們來討論自定義ViewGroup,為什麼要自定義ViewGroup,其實就是為了更好的管理View。 自定義Vie
Android面試,與Service交互方式
五種交互方式,分別是:通過廣播交互、通過共享文件交互、通過Messenger(信使)交互、通過自定義接口交互、通過AIDL交互。(可能更多)Service與Thread的
android studio如何把本地項目上傳到git@osc
1.5版本的android studio上傳本地項目到git@osc上:1、在git上創建一個項目;2、在studio上導入git上新創建的項目:把git上的地址復制下來
Android 橫豎屏+碎片的應用
最終效果展示: 項目介紹:通過碎片的方式顯示標題列表和內容,其中也牽涉到橫豎屏的知識 項目代碼下載:http://files.cnblogs.com/