安卓通過jar包使用butterKnife以及拍照相關Intent學習

一:butterknife的引入及使用

annotation(註解)簡介

註解是JDK5.0開始的新增特性。爲代碼添加一句特殊的"說明",添加了註解的代碼會引起編譯器的“格外重視”
系統提供了一些註解
@Override 
@Deprecated

我們也可以寫自己的自定義註解,步驟如下:
step 1 創建註解類。
step 2 在註解類中,聲明註解類需要的信息
       這些信息以方法的方式來聲明
       注:註解中有一個特殊的信息名稱:value
step 3 要利用2個系統已經提供好的元註解來聲明第一步創建的自定義註解的使用範圍
       注:元註解就是用來註解註解的註解
step 4 要提供對第一步創建的註解的一個註解解釋器
一些特殊的寫法:
利用資源的名字,反查資源id
例如根據MainActivity這個類名來查詢R.layout.activity_main這個佈局文件的資源id
step 1:獲得類名"MainActivity":
String clazzName = activity.getClass().getSimpleName();
step 2:獲得"Main"
int endIdx =  clazzName.indexOf("Activity");
String sub = clazzName.substring(0,endIdx);
step3:獲得資源文件的名字"activity_main":
String layoutName = "activity_"+sub.toLowerCase();
step 4:根據資源的名字(字符串)去反查資源的id
int id = activity.getResourc().getIdentifier(layoutName, "layout", activity.getPackageName());
根據獲得的資源id進行使用
if(id!=0){
 activity.setContentView(id);
}

以上爲自定義註解的寫法,某種程度上方便了我們寫代碼,但是爲了方便我們寫代碼,很多人都會引入第三方架包butterknife來省去我們寫findViewbyid這種類似的語句更加方便,只需要簡單的幾步設置就可以方便的使用了。

1.下載第三方butterknife架包,並將它導入到我們的項目的libs目錄下,如下:

2.鼠標右鍵選擇我們導入的butterknife選擇Build Path下的Add to BuildPath

3.鼠標右鍵點擊我們的項目名稱選擇Properties

4.按照圖示操作即可

5.再點擊下一項,按圖示操作即可

這樣一個第三方架包butterknife引入就成功了,還需要在項目中進行相應的綁定就可以使用了

1.1在activity中:ButterKnife.bind(this);

1.2在adapter中可以使用這種方式綁定:

public ViewHolder(View convertView){
ButterKnife.bind(this,convertView);
}

二:下面來介紹使用Intent創建選擇窗口,以及如何實現textView中顯示的時間實時更新

這裏以創建一個窗口選擇是打開系統相機還是打開系統圖庫爲例

通過啓動一個線程,利用handler發消息來實現實時更新textView中的時間顯示

代碼實現可如下:

package com.example.intentdemo.ui;

import java.io.File;
import java.lang.annotation.ElementType;
import java.text.SimpleDateFormat;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.provider.MediaStore.Images.Media;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;

import com.example.intentdemo.R;

public class MainActivity extends Activity {
private static final int updateNow=1;

@Bind(R.id.tv)
TextView tv;
@Bind(R.id.iv)
ImageView iv;
Button btn;

private String filePath;
private String uriString;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.btn)
public void show(View v){
new TimeUpdateThread().start();
//打開系統圖庫
Intent intent1=new Intent(Intent.ACTION_PICK);
intent1.setDataAndType(Media.EXTERNAL_CONTENT_URI, "image/*");
//打開系統相機拍照
Intent intent2=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//拍照後照片的保存路徑

File file=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), System.currentTimeMillis()+".jpg");
//拍照後照片在SD卡上的保存路徑
uriString=file.getAbsolutePath();
Uri uri=Uri.parse(uriString);
intent2.putExtra(MediaStore.EXTRA_OUTPUT, uri);
//彈出一個對話框讓用戶選擇圖片源
Intent intent=Intent.createChooser(intent1, "選擇圖片加載來源");
intent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{intent2});
startActivityForResult(intent, 100);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK&&requestCode==100){
if(data!=null){
//圖庫選擇的圖片
Uri uri=data.getData();
//通過查詢拿到圖片在SD卡上的真實地址
Cursor cursor = getContentResolver().query(uri, new String[]{Media.DATA}, null, null, null);
cursor.moveToNext();
filePath=cursor.getString(0);
cursor.close();
}else{
//相機拍攝的照片
filePath=uriString;
}
iv.setImageBitmap(BitmapFactory.decodeFile(filePath));
}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章