私は多くのデバイスでハードウェアアクセラレーションされたビューを持っています。そのビューでは、ハードウェアアクセラレーションが使用されているかどうかを確認する必要があります。 According to Android SDK documentation、これはView.isHardwareAccelerated()
を使用して行われます。興味深いのは、ハードウェアアクセラレーションをサポートするデバイスでテストするとき、このメソッドは実際にはビュー自体がハードウェアアクセラレーションされていても、常にfalseを返すことです。 (私は確かにこれを確認しました)それはもっと混乱します:View.isHardwareAccelerated()は常に偽です
View.getLayerType()
に電話すると、それは常にView.LAYER_TYPE_NONE
に設定されています。 に電話すると、ハードウェアアクセラレーションを効果的に無効にすることができます。 View.setLayerType(View.LAYER_TYPE_HARDWARE)
またはView.setLayerType(View.LAYER_TYPE_NONE)
のいずれかを呼び出して再度有効にすることができます。なぜView.LAYER_TYPE_NONE
がハードウェアアクセラレーションを有効にするのですか?
hwアクセラレーションをサポートするデバイスでは、View.LAYER_TYPE_SOFTWARE
が設定されているかどうかをチェックするだけで、この方法はhwアクセラレーションをサポートしていないデバイスではうまく動作しないとの疑いがあります。 View.isHardwareAccelerated()
を乱用しているのか、それとも単に壊れているのかを知りたいです。
EDIT: 私はこの問題を理解するためにもう少し近いと思います。この質問にも役立ちました:
Detect Hardware Acceleration at Runtime: Android
私の作業理論が表示doesntのは、まだそれは私が私のチェックをやっているところである、コンストラクタが呼び出されますときには、ハードウェアアクセラレーションやないかどうかを知ることです。これが当てはまる場合、Viewを拡張するクラスでオーバーライドできるものがあり、ハードウェアアクセラレーションを正常にチェックできるようになります。私はView.onSizeChanged(...)
がうまくいくと思っていますが、何度も呼び出される可能性のあるものを使わないでください。
編集#2: そうだったようです。私はView.onSizeChanged()
に私の小切手を移動し、今正しく報告します。私はまだこのチェックを移動することができます私のビュー内のより良い場所theres場合は、私は思っています。
私は不思議です、あなたはLAYER_TYPE_HARDWARE、LAYER_TYPE_SOFTWAREとLAYER_TYPE_NONEの違いを理解しましたか? –