本日學習:
1. 透過呼叫 Android 內建相機功能拍照
2. 自訂 Gallery to review Photo
參考資料:
http://developer.android.com/reference/android/provider/MediaStore.html
一、自訂照片 存放路徑 與 檔案名稱:
mPhotoPath = Environment.getExternalStorageDirectory() + "/myPhoto/"
mPhotoName = "123.jpg";
ContentValues values = new ContentValues();
values.put(Images.Media.DATA, mPhotoPath + mPhotoName); //指定檔案路徑名稱
values.put(Images.Media.TITLE, mPhotoName); //指定檔案名稱
values.put(Images.Media.DISPLAY_NAME, mPhotoName); //指定檔案顯示名稱
values.put(Images.Media.MIME_TYPE, "image/jpeg"); //指定檔案格式
Uri photoUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent CameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
CameraIntent.putExtra("return-data", true);
CameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(CameraIntent, 0);
缺點是 DCIM 資料夾裡也會存一張系統產生的照片 ...
二、自訂 Gallery 僅滑動單張照片:
public class myGallery extends Gallery {
public myGallery(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
setAnimationDuration(600);
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float velMax = 2500f;
float velMin = 1000f;
float velX = Math.abs(velocityX);
if (velX > velMax) {
velX = velMax;
} else if (velX < velMin) {
velX = velMin;
}
velX -= 600;
int k = 500000;
int speed = (int) Math.floor(1f / velX * k);
setAnimationDuration(speed);
int kEvent;
if (isScrollingLeft(e1, e2)) {
kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
} else {
kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent, null);
return true;
}
private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2){
return e2.getX() > e1.getX();
}
}
xml file:
<com.mynamespace.myGallery
android:id="@+id/Gallery01"
....
/>