android相片拼板源码,实现仿微信拍照和选取相片(转自网络)
1,首先MainActivity
package?com.example.picpopupwindow;
import?android.app.Activity;
import?android.content.Intent;
import?android.graphics.Bitmap;
import?android.net.Uri;
import?android.os.Bundle;
import?android.provider.MediaStore;
import?android.view.View;
import?android.view.View.OnClickListener;
import?android.widget.ImageView;
public?class?MainActivity?extends?Activity?{
private?ImageView?photo;
@Override
public?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
photo?=?(ImageView)?this.findViewById(R.id.text);
//?把文字控件添加監聽,點擊彈出自定義窗口
photo.setOnClickListener(new?OnClickListener()?{
public?void?onClick(View?v)?{
//使用startActivityForResult啟動SelectPicPopupWindow當返回到此Activity的時候就會調用onActivityResult函數
startActivityForResult(new?Intent(MainActivity.this,
SelectPicPopupWindow.class),?1);
}
});
}
@Override
protected?void?onActivityResult(int?requestCode,?int?resultCode,?Intent?data)?{
switch?(resultCode)?{
case?1:
if?(data?!=?null)?{
//取得返回的Uri,基本上選擇照片的時候返回的是以Uri形式,但是在拍照中有得機子呢Uri是空的,所以要特別注意
Uri?mImageCaptureUri?=?data.getData();
//返回的Uri不為空時,那么圖片信息數據都會在Uri中獲得。如果為空,那么我們就進行下面的方式獲取
if?(mImageCaptureUri?!=?null)?{
Bitmap?image;
try?{
//這個方法是根據Uri獲取Bitmap圖片的靜態方法
image?=?MediaStore.Images.Media.getBitmap(this.getContentResolver(),?mImageCaptureUri);
if?(image?!=?null)?{
photo.setImageBitmap(image);
}
}?catch?(Exception?e)?{
e.printStackTrace();
}
}?else?{
Bundle?extras?=?data.getExtras();
if?(extras?!=?null)?{
//這里是有些拍照后的圖片是直接存放到Bundle中的所以我們可以從這里面獲取Bitmap圖片
Bitmap?image?=?extras.getParcelable("data");
if?(image?!=?null)?{
photo.setImageBitmap(image);
}
}
}
}
break;
default:
break;
}
}
}
2,選擇相片得activity。
package?com.example.picpopupwindow;
import?android.app.Activity;
import?android.content.ActivityNotFoundException;
import?android.content.Intent;
import?android.os.Bundle;
import?android.provider.MediaStore;
import?android.view.MotionEvent;
import?android.view.View;
import?android.view.View.OnClickListener;
import?android.widget.Button;
import?android.widget.LinearLayout;
import?android.widget.Toast;
public?class?SelectPicPopupWindow?extends?Activity?implements?OnClickListener?{
private?Button?btn_take_photo,?btn_pick_photo,?btn_cancel;
private?LinearLayout?layout;
private?Intent?intent;
@Override
protected?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.alert_dialog);
intent?=?getIntent();
btn_take_photo?=?(Button)?this.findViewById(R.id.btn_take_photo);
btn_pick_photo?=?(Button)?this.findViewById(R.id.btn_pick_photo);
btn_cancel?=?(Button)?this.findViewById(R.id.btn_cancel);
layout?=?(LinearLayout)?findViewById(R.id.pop_layout);
//?添加選擇窗口范圍監聽可以優先獲取觸點,即不再執行onTouchEvent()函數,點擊其他地方時執行onTouchEvent()函數銷毀Activity
layout.setOnClickListener(new?OnClickListener()?{
public?void?onClick(View?v)?{
//?TODO?Auto-generated?method?stub
Toast.makeText(getApplicationContext(),?"提示:點擊窗口外部關閉窗口!",
Toast.LENGTH_SHORT).show();
}
});
//?添加按鈕監聽
btn_cancel.setOnClickListener(this);
btn_pick_photo.setOnClickListener(this);
btn_take_photo.setOnClickListener(this);
}
//?實現onTouchEvent觸屏函數但點擊屏幕時銷毀本Activity
@Override
public?boolean?onTouchEvent(MotionEvent?event)?{
finish();
return?true;
}
@Override
protected?void?onActivityResult(int?requestCode,?int?resultCode,?Intent?data)?{
if?(resultCode?!=?RESULT_OK)?{
return;
}
//選擇完或者拍完照后會在這里處理,然后我們繼續使用setResult返回Intent以便可以傳遞數據和調用
if?(data.getExtras()?!=?null)
intent.putExtras(data.getExtras());
if?(data.getData()!=?null)
intent.setData(data.getData());
setResult(1,?intent);
finish();
}
public?void?onClick(View?v)?{
switch?(v.getId())?{
case?R.id.btn_take_photo:
try?{
//拍照我們用Action為MediaStore.ACTION_IMAGE_CAPTURE,
//有些人使用其他的Action但我發現在有些機子中會出問題,所以優先選擇這個
Intent?intent?=?new?Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,?1);
}?catch?(Exception?e)?{
e.printStackTrace();
}
break;
case?R.id.btn_pick_photo:
try?{
//選擇照片的時候也一樣,我們用Action為Intent.ACTION_GET_CONTENT,
//有些人使用其他的Action但我發現在有些機子中會出問題,所以優先選擇這個
Intent?intent?=?new?Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,?2);
}?catch?(ActivityNotFoundException?e)?{
}
break;
case?R.id.btn_cancel:
finish();
break;
default:
break;
}
}
}
總結
以上是生活随笔為你收集整理的android相片拼板源码,实现仿微信拍照和选取相片(转自网络)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: teamviewer12 linux安装
- 下一篇: task3- python与word