私はここで答えを使用して、カメラのプレビューを縦向きに回転させることができました: http ://code.google.com/p/zxing/issues/detail?id=178#c46
ただし、プレビュー自体は引き伸ばされ/歪んでいます-高さはボックスを埋めるために引き伸ばされているように見えます(ただし、幅が画面に対して大きすぎて、収まるように押しつぶされている可能性があります)
サーフェスビューに合わせてコンテンツを拡大するのではなく、コンテンツを「ラップ」する方法はありますか?
編集:「CameraConfigurationManager」の「findBestPreviewSizeValue」メソッドを変更し、XポイントとYポイントを逆にすることでソートしました(以下のポインターのsean owenに感謝します!)。コードは次のとおりです。
private static Point findBestPreviewSizeValue(CharSequence previewSizeValueString,
Point screenResolution) {
int bestX = 0;
int bestY = 0;
int diff = Integer.MAX_VALUE;
for (String previewSize : COMMA_PATTERN.split(previewSizeValueString)) {
previewSize = previewSize.trim();
int dimPosition = previewSize.indexOf('x');
if (dimPosition < 0) {
Log.w(TAG, "Bad preview-size: " + previewSize);
continue;
}
int newX;
int newY;
try {
newY = Integer.parseInt(previewSize.substring(0, dimPosition));
newX = Integer.parseInt(previewSize.substring(dimPosition + 1));
//original:
//newX = Integer.parseInt(previewSize.substring(0, dimPosition));
//newY = Integer.parseInt(previewSize.substring(dimPosition + 1));
} catch (NumberFormatException nfe) {
Log.w(TAG, "Bad preview-size: " + previewSize);
continue;
}
int newDiff = Math.abs(newX - screenResolution.x) + Math.abs(newY - screenResolution.y);
if (newDiff == 0) {
bestX = newY;
bestY = newX;
//original:
//bestX = newX;
//bestY = newY;
break;
} else if (newDiff < diff) {
bestX = newY;
bestY = newX;
//original:
//bestX = newX;
//bestY = newY;
diff = newDiff;
}
}
if (bestX > 0 && bestY > 0) {
return new Point(bestX, bestY);
}
return null;
}