編輯:關於Android編程
從API 8開始,新增了一個類:
android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視頻第一幀得到的Bitmap,2個對圖片進行縮略處理。
public static Bitmap createVideoThumbnail (String filePath, int kind)
第一個參數是視頻文件的路徑,第二個參數是指定圖片的大小,有兩種選擇Thumbnails.MINI_KIND與Thumbnails.MICRO_KIND。
第一種文檔上說大小是512 x 384 ,我用一個MP4格式文件測試得到544 x 960,用一個wmv格式文件測試得到160 x 120。明顯不靠譜。第二種參數兩種格式文件得到的大小都是 96 x 96,這個才是縮略圖。extractThumbnail(Bitmap source, int width, int height, int options) extractThumbnail(Bitmap source, int width, int height)
這兩種方法都是用來處理Bitmap的大小的,第一個參數是要處理的Bitmap,第二個參數是處理後寬度,第三個是高度,第四個參數options,如果options定義為OPTIONS_RECYCLE_INPUT,則回收資源。也就是說可以用第三種方法把截取到的視頻第一幀的Bitmap轉成任意想要的大小,第三個方法還可以獲取內存卡內圖片的縮略圖。
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path1, Thumbnails.MINI_KIND); bitmap = ThumbnailUtils.extractThumbnail(bitmap, 210, 210);
從API 10開始新增一類MediaMetadataRetriever可以用來獲取媒體文件的信息
MediaMetadataRetriever mmr = new MediaMetadataRetriever(); mmr.setDataSource(/sdcard/33.mp4); Bitmap bitmap = mmr.getFrameAtTime(); image.setImageBitmap(bitmap); System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)+); System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)+); mmr.release();
MediaMetadataRetriever可以獲取視頻任何一幀的縮略圖。
public static Bitmap createVideoThumbnail(String filePath) { // MediaMetadataRetriever is available on API Level 8 // but is hidden until API Level 10 Class clazz = null; Object instance = null; try { clazz = Class.forName(android.media.MediaMetadataRetriever); instance = clazz.newInstance(); Method method = clazz.getMethod(setDataSource, String.class); method.invoke(instance, filePath); // The method name changes between API Level 9 and 10. if (Build.VERSION.SDK_INT <= 9) { return (Bitmap) clazz.getMethod(captureFrame).invoke(instance); } else { byte[] data = (byte[]) clazz.getMethod(getEmbeddedPicture).invoke(instance); if (data != null) { Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); if (bitmap != null) return bitmap; } return (Bitmap) clazz.getMethod(getFrameAtTime).invoke(instance); } } catch (IllegalArgumentException ex) { // Assume this is a corrupt video file } catch (RuntimeException ex) { // Assume this is a corrupt video file. } catch (InstantiationException e) { Log.e(TAG, createVideoThumbnail, e); } catch (InvocationTargetException e) { Log.e(TAG, createVideoThumbnail, e); } catch (ClassNotFoundException e) { Log.e(TAG, createVideoThumbnail, e); } catch (NoSuchMethodException e) { Log.e(TAG, createVideoThumbnail, e); } catch (IllegalAccessException e) { Log.e(TAG, createVideoThumbnail, e); } finally { try { if (instance != null) { clazz.getMethod(release).invoke(instance); } } catch (Exception ignored) { } } return null; }
用Activity的onTouchEvent方法實現監聽手指上下左右滑動應用了Activity的ontouchEvent方法監聽手指點擊事件,手指滑動的時候會先按下,滑倒
相信很多朋友都購買了360奇酷手機,使用了一段時間後,發現手機裡有個冷藏室功能。那麼,這個功能有什麼用?怎麼操作?相信很多新用戶正在尋找答案吧!別著急,下面
介紹android官方文檔:AlarmManager在Android平台,除了使用AlarmManger外,還可以使用Timer或者Handler來實現定時任務,但這兩種
這裡記錄一下Canvas 相關API的使用,權當自己作筆記,以後需要好參考前面有一文Android應用程序窗口View的draw過程講到View的繪制過程,其中說到,Vi