android canvas 进行放大时,其上有一个view,这个view的背景设置为了一个drawable,这个drawable 使用<shape 作为根标签,其中定义了角度等固定dp值,放大canvas时,如何避免这些dp值被一起扩大?
时间: 2024-03-27 19:41:20 浏览: 12
在进行canvas放大时,可以通过计算当前缩放比例,将drawable的dp值除以该比例,从而避免这些dp值被一起扩大,使其在放大后能够保持原有的大小。具体做法如下:
1. 在view的onDraw()方法中获取当前的缩放比例,可以通过canvas的getMatrix()方法获取。
```java
Matrix matrix = canvas.getMatrix();
float[] matrixValues = new float[9];
matrix.getValues(matrixValues);
float scaleX = matrixValues[Matrix.MSCALE_X];
float scaleY = matrixValues[Matrix.MSCALE_Y];
```
2. 在drawable的shape标签中,定义需要进行缩放的dp值,并使用相对单位"dp"进行标识。
```xml
<solid android:color="@color/red" />
<corners android:radius="10dp" />
<size android:width="100dp" android:height="100dp" />
```
3. 在进行绘制时,将drawable的dp值除以当前的缩放比例,从而得到实际需要绘制的大小。
```java
int width = (int) (100 / scaleX);
int height = (int) (100 / scaleY);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
```
通过以上步骤,就可以实现在进行canvas放大时,避免drawable中的dp值被一起扩大,保持其原有的大小。