8

カスタム ドローアブル (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);
}

理由はわかりませんが、同じ色の影を付けました。すべてを再確認しましたが、どこに問題があるのか​​ わかりません。ギャラクシーネクサスでテストします。しかし、エミュレータでは問題なく動作します。

4

1 に答える 1

13

よくわかりませんが、これはおそらくハードウェア アクセラレーションによるものです。setShadowLayerビューが加速している場合は機能しません。アプリ全体のアクセラレーションを無効にして確認してみてください。これを読む。

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

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

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

setLayerTypeを使用してレイヤー タイプを個々のビューに設定するか、アプリ全体のマニフェストでアクセラレーションをオフにします。

于 2013-03-14T10:22:35.187 に答える