編輯:關於Android編程
今天無聊做了一些照相、相冊裁剪功能,希望可以幫到大家!
不多說了,貼代碼實際一點:
首先是XML:
然後貼一下主activity:
/**
* @Title: PicCutDemoActivity.java
* @Package com.xiaoma.piccut.demo
* @Description: 圖片裁剪功能測試
* @author XiaoMa
*/
public class PicCutDemoActivity extends Activity implements OnClickListener {
private ImageButton ib = null;
private ImageView iv = null;
private Button btn = null;
private String tp = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化
init();
}
/**
* 初始化方法實現
*/
private void init() {
ib = (ImageButton) findViewById(R.id.imageButton1);
iv = (ImageView) findViewById(R.id.imageView1);
btn = (Button) findViewById(R.id.button1);
ib.setOnClickListener(this);
iv.setOnClickListener(this);
btn.setOnClickListener(this);
}
/**
* 控件點擊事件實現
*
* 因為有朋友問不同控件的背景圖裁剪怎麼實現,
* 我就在這個地方用了三個控件,只為了自己記錄學習
* 大家覺得沒用的可以跳過啦
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.imageButton1:
ShowPickDialog();
break;
case R.id.imageView1:
ShowPickDialog();
break;
case R.id.button1:
ShowPickDialog();
break;
default:
break;
}
}
/**
* 選擇提示對話框
*/
private void ShowPickDialog() {
new AlertDialog.Builder(this)
.setTitle("設置頭像...")
.setNegativeButton("相冊", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
/**
* 剛開始,我自己也不知道ACTION_PICK是干嘛的,後來直接看Intent源碼,
* 可以發現裡面很多東西,Intent是個很強大的東西,大家一定仔細閱讀下
*/
Intent intent = new Intent(Intent.ACTION_PICK, null);
/**
* 下面這句話,與其它方式寫是一樣的效果,如果:
* intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
* intent.setType(""image/*");設置數據類型
* 如果朋友們要限制上傳到服務器的圖片類型時可以直接寫如:"image/jpeg 、 image/png等的類型"
*
*/
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(intent, 1);
}
})
.setPositiveButton("拍照", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
/**
* 下面這句還是老樣子,調用快速拍照功能,至於為什麼叫快速拍照,大家可以參考如下官方
* 文檔,you_sdk_path/docs/guide/topics/media/camera.html
*
*/
Intent intent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
//下面這句指定調用相機拍照後的照片存儲的路徑
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
.fromFile(new File(Environment
.getExternalStorageDirectory(),
"xiaoma.jpg")));
startActivityForResult(intent, 2);
}
}).show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
// 如果是直接從相冊獲取
case 1:
startPhotoZoom(data.getData());
break;
// 如果是調用相機拍照時
case 2:
File temp = new File(Environment.getExternalStorageDirectory()
+ "/xiaoma.jpg");
startPhotoZoom(Uri.fromFile(temp));
break;
// 取得裁剪後的圖片
case 3:
/**
* 非空判斷大家一定要驗證,如果不驗證的話,
* 在剪裁之後如果發現不滿意,要重新裁剪,丟棄
*/
if(data != null){
setPicToView(data);
}
break;
default:
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* 裁剪圖片方法實現
* @param uri
*/
public void startPhotoZoom(Uri uri) {
/*
* 至於下面這個Intent的ACTION是怎麼知道的,大家可以看下自己路徑下的如下網頁
* yourself_sdk_path/docs/reference/android/content/Intent.html
*/
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//下面這個crop=true是設置在開啟的Intent中設置顯示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是寬高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪圖片寬高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, 3);
}
/**
* 保存裁剪之後的圖片數據
* @param picdata
*/
private void setPicToView(Intent picdata) {
Bundle extras = picdata.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
Drawable drawable = new BitmapDrawable(photo);
/**
* 下面注釋的方法是將裁剪之後的圖片以Base64Coder的字符方式上
* 傳到服務器,QQ頭像上傳采用的方法跟這個類似
*/
/*ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 60, stream);
byte[] b = stream.toByteArray();
// 將圖片流以字符串形式存儲下來
tp = new String(Base64Coder.encodeLines(b));
這個地方大家可以寫下給服務器上傳圖片的實現,直接把tp直接上傳就可以了,
服務器處理的方法是服務器那邊的事了,吼吼
如果下載到的服務器的數據還是以Base64Coder的形式的話,可以用以下方式轉換
為我們可以用的圖片類型就OK啦...吼吼
Bitmap dBitmap = BitmapFactory.decodeFile(tp);
Drawable drawable = new BitmapDrawable(dBitmap);
*/
ib.setBackgroundDrawable(drawable);
iv.setBackgroundDrawable(drawable);
}
}
主要代碼已貼完畢!
試試吧
Android ListView組件詳解及示例代碼
Android 列表組件 ListView列表組件是開發中經常用到組件,使用該組件在使用時需要為它提供適配器,由適配器提供來確定顯示樣式和顯示數據。下面看一個例子:新建一
Android 實例講解添加本地圖片和調用系統拍照圖片
在項目的開發過程我們離不開圖片,而有時候需要調用本地的圖片,有時候需要調用拍照圖片。同時實現拍照的方法有兩種,一種是調用系統拍照功能,另一種是自定義拍照功能。而本博文目前
Unity3D+moba+技能指示器(一)
1 功能描述類似王者榮耀,按下的技能如果是需要預判的或者是可以選擇單一目標,產生一個搖桿,在地形上顯示輔助的UI提示。存在以下幾種情況:1.扇形范圍技能 2.方
Android利用Chronometer實現倒計時功能
項目需要實現一個計時的功能,利用Chronometer雖然可以很方便的實現計時功能,但需要的卻是一個倒計時控件。百度了一下方法不少,倒計時的卻沒有,於是用Chronome