編輯:關於Android編程
在小米手機3上發現正常運行的程序拍照無法正常回調,且點擊拍照按鈕後會停留在最後拍照的界面,且日志裡不會有任何報錯信息。經排查發現是初始化相機的時候設置了setPictureSize()導致的。
奇怪的是系統相機一切正常,且可以用硬件最大分辨率,可是我的代碼裡只能支持最高為2688x1520的pictureSize,否則均無法收到onPictureTaken回調。
後來發現我的previewSize設置的是系統最高分辨率3840x2160,後來把分辨率改為系統屏幕近似分辨率後,pictureSize可以設置最高分辨率了。
下面給出代碼:
/** 預覽界面分辨率 */
public static void setPreviewSize(Camera.Parameters parametes) {
List localSizes = parametes.getSupportedPreviewSizes();
Camera.Size biggestSize = null;
Camera.Size fitSize = null;// 優先選屏幕分辨率
Camera.Size targetSize = null;// 沒有屏幕分辨率就取跟屏幕分辨率相近(大)的size
Camera.Size targetSiz2 = null;// 沒有屏幕分辨率就取跟屏幕分辨率相近(小)的size
if(localSizes != null) {
int cameraSizeLength = localSizes.size();
for (int n = 0; n < cameraSizeLength; n++) {
Camera.Size size = localSizes.get(n);
if(biggestSize == null ||
(size.width >= biggestSize.width && size.height >= biggestSize.height)) {
biggestSize = size;
}
if(size.width == DeviceUtils.screenHPixels
&& size.height == DeviceUtils.screenWPixels) {
fitSize = size;
} else if (size.width == DeviceUtils.screenHPixels
|| size.height == DeviceUtils.screenWPixels) {
if(targetSize == null) {
targetSize = size;
} else if (size.width < DeviceUtils.screenHPixels
|| size.height < DeviceUtils.screenWPixels) {
targetSiz2 = size;
}
}
}
if(fitSize == null) {
fitSize = targetSize;
}
if(fitSize == null) {
fitSize = targetSiz2;
}
if(fitSize == null) {
fitSize = biggestSize;
}
parametes.setPreviewSize(fitSize.width, fitSize.height);
}
}
/** 輸出的照片為最高像素 */
public static void setPictureSize(Camera.Parameters parametes) {
List localSizes = parametes.getSupportedPictureSizes();
Camera.Size biggestSize = null;
Camera.Size fitSize = null;// 優先選預覽界面的尺寸
Camera.Size previewSize = parametes.getPreviewSize();
float previewSizeScale = 0;
if(previewSize != null) {
previewSizeScale = previewSize.width / (float) previewSize.height;
}
if(localSizes != null) {
int cameraSizeLength = localSizes.size();
for (int n = 0; n < cameraSizeLength; n++) {
Camera.Size size = localSizes.get(n);
if(biggestSize == null) {
biggestSize = size;
} else if(size.width >= biggestSize.width && size.height >= biggestSize.height) {
biggestSize = size;
}
// 選出與預覽界面等比的最高分辨率
if(previewSizeScale > 0
&& size.width >= previewSize.width && size.height >= previewSize.height) {
float sizeScale = size.width / (float) size.height;
if(sizeScale == previewSizeScale) {
if(fitSize == null) {
fitSize = size;
} else if(size.width >= fitSize.width && size.height >= fitSize.height) {
fitSize = size;
}
}
}
}
// 如果沒有選出fitSize, 那麼最大的Size就是FitSize
if(fitSize == null) {
fitSize = biggestSize;
}
parametes.setPictureSize(fitSize.width, fitSize.height);
}
}
首先看下效果圖一:布局代碼鍵盤由0~9的數字,刪除鍵和完成鍵組成,也可以根據需求通過GridView適配器的getItemViewType方法來定義。點擊鍵的時候背景有變
本篇主要是LineChart實戰相關知識和簡單的源碼剖析,相關源碼沒有,自己動手實踐學習才是最有效的方法。LineChart Simple運行效果圖個人感官覺得某些屬性設
Demo實現的效果圖如下:工程目錄如下圖:一個Application,一個實體類,一個Activity,另一個是自定義的AutoPlayingViewPager繼承Fra
一、效果圖二、描述更改Android項目中的語言,這個作用於只用於此APP,不會作用於整個系統三、解決方案(一)布局文件<LinearLayout xmlns:an