質問
Zxingバーコードスキャナーコードの1.6バージョンで作業しています。
Android Market(3.53)のこのアプリのバージョンは私の信じられないほど正常に実行されますが、ViewFinderviewは自分でコンパイルすると間違っています(3.5beta)。
ViewFinderviewのデフォルトのキャンバスサイズ(画面全体を埋める)は533x320であり、実際の画面寸法は800x480であることがわかりました。
したがって、オンドローメソッドでは、ViewFinderviewはViewFinderの長方形の画面座標を想定していますが、オンドローのCanvas座標にそれらを適用しています。これにより、ビューファインダーが描画されすぎてXおよびYのディメンションで大きすぎます。
それでは、あなたのビューが得られるキャンバスの実際の寸法を決定するものは何ですか?私の場合、キャンバスは画面座標と比較して3分の1で縮小されます。バージョン3.5betaと3.53の間でこれに影響を与える可能性のあるコードの違いは見つかりません。
解決
アプリケーションは、密度が異なる画面のサポートを宣言していないと思います。呼ばれるタグがあります <supports-screens>
AndroidManifest.xmlでは、パラメーターがあります anyDensity
. 。に設定されている場合 true
, 、アプリケーションは、 false
, 、Androidは画面自体をスケーリングして、アプリが画面密度に応じて実際のサイズとは異なるサイズの画面に描画できるようにします。
デフォルトでは、このパラメーターはに設定されています true
アプリケーションが4以上のAPIレベルをターゲットにしている場合 false
それ以外は。これは、Android 1.6アプリケーションが固定された画面サイズと密度のために作成され、Android 1.6から始まるため、これが変更されたため、後方コンパビリティを維持する必要があるために行われます。
あなたの場合、画面の高密度は1.5係数に対応します。したがって、800 pxの高さで画面に描画すると、これは通常の密度の533 pxの画面に描画するのと同じと見なされます。
あなたが望むなら Canvas
「本当の」サイズを持つために、 anyDensity
に設定する必要があります true
または少なくとも minSdkVersion
4以上。