2013-03-11 3 views
6

私はカスタムDrawable(Drawableから拡張されています)を作成しています。シャドーレイヤーはエミュレーターで動作しますが、実際のデバイスでは動作しません

public void draw(Canvas canvas) { 
    Path path = new Path(); 
    path.moveTo(0, 0); 
    path.lineTo(0, Y/2); 
    path.lineTo(X/2, Y); 
    path.lineTo(X, Y/2); 
    path.lineTo(X, 0); 
    path.lineTo(0, 0); 
    Paint paint = new Paint(); 
    paint.setColor(context.getResources().getColor(R.color.red_dark)); 
    paint.setStyle(Style.FILL_AND_STROKE); 
    paint.setStrokeWidth(2f); 
    paint.setShadowLayer(1, 0, 10f, context.getResources().getColor(R.color.black)); 
    canvas.drawPath(path, paint); 
} 

私はなぜ知らないが、それは、私はすべてをダブルチェックし、問題がどこにあるか私には表示されません同じ色で影を置く:

は、ここに私のコードの一部です。私は銀河のネクサスでそれをテストします。しかし、エミュレータではうまく動作します。

+0

これは私のサムスンノートではうまく動作しますが、私はビューをドロウアブルではない拡張しています。もっと多くのデバイスでこれを試しましたか? – Lumis

答えて

10

確かにわかりませんが、おそらくハードウェアアクセラレーションが原因です。 setShadowLayerビューを高速化しても機能しません。アプリ全体のアクセラレーションを無効にしてチェックしてみてください。 Read this.

サポートされていない描画操作

setShadowLayer():テキストで動作のみ

がソフトウェアでレンダリングされるビューを強制的にソフトウェア層タイプを使用。ハードウェアが高速化されているビュー(たとえば、アプリケーション全体がハードウェアアクセラレータである場合など)がレンダリングに問題がある場合、これはハードウェアレンダリングパイプラインの制限を回避する簡単な方法です。

setLayerTypeを使用してレイヤータイプを個々のビューに設定するか、turn off acceleration in your manifestをアプリ全体に設定します。

+4

実際には、ハードウェアアクセラレーションが原因です。ドロップシャドウは現在、テキストのみでサポートされています。他のシェイプにドロップシャドウが必要な場合は、ビュー上にソフトウェアレイヤーを使用する必要があります。 –

+0

ホー、どうすればいいですか?私はそのようなグラフィカルな開発者ではないからです。 – Tsunaze

+0

更新された回答。 – Leonidos

関連する問題