我为我的应用程序开发了一个自定义视图组件,我正在努力为圆圈添加阴影.
这是我的类扩展View的代码
public class ChartView extends View {
public ChartView(Context context, AttributeSet attributeSet){
super(context, attributeSet);
init();
}
Paint paint;
public void init(){
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.FILL);
paint.setShadowLayer(30, 0, 0, Color.RED);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawCircle(getWidth()/2, getHeight()/2,50, paint);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我注意到,取决于API,对shadowLayer有很大影响.
这是输出
<uses-sdk android:targetSdkVersion="13"/>
Run Code Online (Sandbox Code Playgroud)

这是输出
<uses-sdk android:targetSdkVersion="14"/> //Higher target API yields the same output.
Run Code Online (Sandbox Code Playgroud)

知道如何克服这种不必要的行为吗?
最好的祝福
我正在开发ICS并尝试理解为什么在SurfaceView中使用Canvas时Canvas.isHardwareAccelerated()将始终返回FALSE.
我尝试过这样一个非常基本的例子:http: //android-coding.blogspot.com/2011/05/drawing-on-surfaceview.html 或者这个:http://jmsliu.com/199/android-帆布example.html的
我甚至将它们修改为在绘制循环中没有任何画布调用,以为我可能在某些绘图调用中遇到了一些不受支持的HW accel操作.我在"不支持的绘图操作"developer.android.com/guide/topics/graphics/hardware-accel.html下检查了此列表,但我没有做任何这些.
我在开发者选项中使用Force GPU渲染标志以及清单内部,我也指定minSDK/targetSDK> = 14.
View.isHardwareAccelerated将返回TRUE,而Canvas.isHardwareAccelerated将始终返回FALSE.
我已经看到Canvas.java的硬编码返回false为isHardwareAccelerated(),而HardwareCanvas.java返回true.我想由于某些原因我没有获得硬件路径,为什么?
SurfaceView中的Canvas可以加速硬件吗?
谢谢