我重写了ImageView的onDraw方法,将半径应用于图像并且它曾经工作正常,但它在Android 5上有一个小问题。事实上它适用于Galaxy S II(4.1)和Nexus 4( 4.4.4),但不是Nexus 5(5.0.1)。
在Nexus 5上,圆形图像后面有一个黑色背景,我没有摆脱它!例如,当我转动手机方向时,黑色背景消失了。
class Avatar extends ImageView
{
private RectF rectangle = new RectF()
private Paint paint1 = new Paint( Paint.ANTI_ALIAS_FLAG )
private Paint paint2 = new Paint()
public Avatar()
{
paint2.setXfermode( new PorterDuffXfermode( Mode.SRC_IN ) )
}
override void onDraw( Canvas canvas )
{
final Drawable drawable = getDrawable
if( drawable == null )
{
super.onDraw( canvas )
return
}
rectangle.set( 0, 0, canvas.getWidth(), canvas.getHeight() )
int restore = canvas.saveLayer( rectangle, null, Canvas.ALL_SAVE_FLAG )
canvas.drawRoundRect( rectangle, 50, 50, paint1 )
canvas.saveLayer( rectangle, paint2, Canvas.ALL_SAVE_FLAG )
super.onDraw( canvas )
canvas.restoreToCount( restore )
}
}
请忽略语法错误或无效的构造函数,因为我从Scala中松散地翻译了
答案 0 :(得分:0)
问题是由硬件加速创建的。我正在显示一个占位符头像,它是从SVG渲染的,需要我禁用硬件加速。然后,当实际位图完成加载时,我用位图替换了SVG,但没有重新开启硬件加速。
我现在能够摆脱丑陋的黑色背景。但是,当硬件加速被禁用时,我仍然不明白为什么代码在Nexus 5上失败,而它在其他设备上运行得非常好!