編輯:關於Android編程
1.獲得相機的權限。這樣設置沒有相機的設備將不能安裝使用。
<manifest ... >
<uses-feature android:name="android.hardware.camera" />
...
</manifest ... >
可以使用android:required="false"設置,這樣沒有相機的設備也可以下載。這時我們需要在運行時調用hasSystemFeature(PackageManager.FEATURE.CAMERA);如果相機不可用,把相機功能取消。
2.拍照(使用照相應用程序)。
android通過啟動一個intent來實現拍照的功能。這其中包括三個方面:intent本身,開啟一個Activity和處理圖像數據。
private void dispatchTakePictureIntent(int actionCode) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, actionCode);
}
我們還需要一個activity來處理這個intent,下面是檢測是否有這麼一個activity的方法:
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
3.查看照片。獲得相機應用拍攝的照片,返回的是Bitmap圖像。下面的代碼是獲得並顯示在ImageView中的代碼。
private void handleSmallCameraPhoto(Intent intent) {
Bundle extras = intent.getExtras();
mImageBitmap = (Bitmap) extras.get("data");
mImageView.setImageBitmap(mImageBitmap);
}
4.保存圖片。android相機應用程序將圖片全尺寸保存。你需要提供具體位置,包括盤符,文件夾,文件名。在Android2.2後,我們很容易得到路徑:
storageDir = new File(
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES
),
getAlbumName()
);
早期版本你需要自己提供文件的目錄:
storageDir = new File (
Environment.getExternalStorageDirectory()
+ PICTURES_DIR
+ getAlbumName()
);
設置文件名:private File createImageFile() throws IOException {
// Create an image file name
String timeStamp =
new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = JPEG_FILE_PREFIX + timeStamp + "_";
File image = File.createTempFile(
imageFileName,
JPEG_FILE_SUFFIX,
getAlbumDir()
);
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
通過Intent將文件位置傳遞給相機應用:
File f = createImageFile();
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
5.添加照片到Gallery。
private void galleryAddPic() {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(mCurrentPhotoPath);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
}
6.解碼圖像尺寸。如果你的系統在現實幾個圖片後,內存使用緊張,可使用下面的技術:一中減少動態堆的數量的方法。
private void setPic() {
// Get the dimensions of the View
int targetW = mImageView.getWidth();
int targetH = mImageView.getHeight();
// Get the dimensions of the bitmap
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
// Determine how much to scale down the image
int scaleFactor = Math.min(photoW/targetW, photoH/targetH);
// Decode the image file into a Bitmap sized to fill the View
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scaleFactor;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
mImageView.setImageBitmap(bitmap);
Android SDK已經提供有進度條組件ProgressDialog組件,但用的時候我們會發現可能風格與我們應用的整體風格不太搭配,而且ProgressDialog的可
效果圖自定義代碼public class BezierView extends View { Paint paint;//畫筆 Path path;//路徑
簡述:相信很多學安卓的都是從java入門之後開始進行安卓的學習,而當我們面臨安卓線程的書寫的時候,發現安卓線程並不是我們想象中使用java的線程寫法就可以。java線程的
7CollapsingToolbarLayoutCollapsingToolbarLayout是Toolbar的一個包裝,可以做出很多很炫的折疊效果。toolbar伸縮t