Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 面罩应倾斜在spedometer帆布上_Android_Android Layout_Android Canvas - Fatal编程技术网

Android 面罩应倾斜在spedometer帆布上

Android 面罩应倾斜在spedometer帆布上,android,android-layout,android-canvas,Android,Android Layout,Android Canvas,我浏览了这座很棒的图书馆 他们在画布上创建了一个自定义速度表。简言之,他们在画布背景和前景上添加了两幅图像,并在速度值发生变化时移动前景图像的矩形遮罩 我已尝试自定义ImageLinearGauge的代码,以显示垂直方向的进度,并进行了以下更改: 通过将alpha值减小到0来保持背景图像(仪表) 创建了由前景图像(填充)组成的移动矩形 在更改seekbar的进度值时,在步骤2中创建的遮罩矩形位于背景之上,这会给人一种进度的感觉 我的问题是: 我希望这个前景蒙版图像与粉红色区域上的黑线对齐/重叠

我浏览了这座很棒的图书馆 他们在画布上创建了一个自定义速度表。简言之,他们在画布背景和前景上添加了两幅图像,并在速度值发生变化时移动前景图像的矩形遮罩

我已尝试自定义ImageLinearGauge的代码,以显示垂直方向的进度,并进行了以下更改:

  • 通过将alpha值减小到0来保持背景图像(仪表)
  • 创建了由前景图像(填充)组成的移动矩形
  • 在更改seekbar的进度值时,在步骤2中创建的遮罩矩形位于背景之上,这会给人一种进度的感觉
  • 我的问题是:

    我希望这个前景蒙版图像与粉红色区域上的黑线对齐/重叠。 尝试了以下方法:

  • 将遮罩矩形沿其中心旋转-20f,但我可以看到动画中的一些不一致

    rect.set(0, heightPa - (heightPa * getOffsetSpeed()).toInt(), widthPa, heightPa)
    val mat = Matrix()
    mat.setRotate(-20f,  (widthPa/2).toFloat(),(heightPa - (heightPa * getOffsetSpeed()).toInt()/2).toFloat());
    mat.mapRect(rectF)
    canvas.translate(padding.toFloat(), padding.toFloat())
    canvas.drawBitmap(foregroundBitmap, rect, rectF, paint)
    canvas.translate((-padding).toFloat(), (-padding).toFloat())
    
  • 尝试旋转画布-保存、旋转、绘制和还原画布,整个粉红色区域正在旋转

        canvas.rotate(-20f);//,  (widthPa/2).toFloat(),(heightPa - (heightPa * getOffsetSpeed()).toInt()/2).toFloat());
        mat.mapRect(rectF)
        canvas.translate(padding.toFloat(), padding.toFloat())
        canvas.drawBitmap(foregroundBitmap, rect, rectF, paint)
        canvas.translate((-padding).toFloat(), (-padding).toFloat())
        canvas.restore();
    
  • 还有其他方法吗,我可以试试吗?请建议