如何解决动态壁纸:更改方向并调用onSurfaceChanged时,画布位图仅绘制屏幕的一半
我正在实现视差滚动壁纸。每当更改方向并调用onSurafceChanged时,对Canvas DrawBitmap的下一次调用只会在屏幕的一半上绘制。需要花更多的时间从onOffsetChanged调用另一个绘制周期来修复它。 这是呼叫流程。
OnSurfaceChanged-> OnOffsetChanged-> Draw()->(仅绘制半个屏幕)-> OnOffsetChanged(手动移动屏幕后)-> Draw()->(立即屏幕完全绘制)
这是我的密码
override fun onSurfaceChanged(holder: SurfaceHolder,format: Int,width: Int,height: Int){
super.onSurfaceChanged(holder,format,width,height)
this.width = width
this.height = height
handler.removeCallbacks(drawRunner)
handler.post(drawRunner)
}
override fun onOffsetsChanged(
xOffset: Float,yOffset: Float,xOffsetStep: Float,yOffsetStep: Float,xPixelOffset: Int,yPixelOffset: Int
) {
super.onOffsetsChanged(
xOffset,yOffset,xOffsetStep,yOffsetStep,xPixelOffset,yPixelOffset
)
xOff = xOffset
handler.removeCallbacks(drawRunner)
handler.post(drawRunner)
}
private fun draw() {
val holder = surfaceHolder
var canvas: Canvas? = null
try {
canvas = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
holder.lockHardwareCanvas()
} else {
holder.lockCanvas()
}
} catch (e: Exception){}
if(canvas!=null) {
val dst:Rect = Rect(0,this.width,this.height)
calcSrcDimen()
canvas.drawBitmap(layer1,src1,dst,null)
canvas.drawBitmap(layer2,src2,null)
canvas.drawBitmap(layer3,src3,null)
canvas.drawBitmap(layer4,src4,null)
canvas.drawBitmap(layer5,src5,null)
canvas.drawBitmap(layer6,src6,null)
canvas.drawBitmap(layer7,src7,null)
}
if (canvas != null) {
try {
holder.unlockCanvasAndPost(canvas)
} catch (e: Exception){}
}
handler.removeCallbacks(drawRunner)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。