import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.SurfaceView;
public class MyView1 extends SurfaceView
{
private Bitmap mBitmap;
private Paint mPaint;
public MyView1(Context context, AttributeSet attrs)
{
super(context, attrs);
mPaint = new Paint();
this.initBitmap();
}
private void initBitmap()
{
mBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
}
@Override
public void draw(Canvas canvas)
{
super.draw(canvas);
mPaint.setColor(Color.BLUE);
canvas.drawRect(100, 200, 200, 300, mPaint);
canvas.save();
canvas.rotate(45);
mPaint.setColor(Color.RED);
canvas.drawRect(150, 10, 200, 60, mPaint);
canvas.restore();
mPaint.setColor(Color.GREEN);
canvas.drawRect(200, 10, 250, 100, mPaint);
}
}
上图代码绘制出的view如下图:
如掉save和restore方法(38和42行),意味着绿色的图形也受到38和42行之间,对canvas操作的代码影响,也会旋转,如下图:
分享到:
相关推荐
`save()`和`restore()`是`Canvas`中两个非常关键的方法,它们主要用于管理绘图状态,确保复杂绘图过程中的可逆性和精确性。在本文中,我们将深入理解这两个方法的作用以及如何在实际应用中使用它们。 首先,`canvas...
`save()`和`restore()`是`Canvas`类中两个非常重要的方法,它们用于管理和恢复绘图状态,确保复杂的绘图操作能够正确无误地进行。在本文中,我们将深入探讨这两个方法的用法、原理以及它们在实际开发中的应用。 `...
`save()`和`restore()`是Canvas中的两个关键方法,它们在复杂的绘图场景中起到至关重要的作用。本演示将深入探讨这两个方法以及它们在Android图形绘制中的应用。 `Canvas.save()`方法的主要功能是保存当前Canvas的...
`save()`和`restore()`是Canvas的重要方法,用于保存和恢复绘图状态,这对于实现复杂的图形变换、绘制流程控制以及避免不必要的计算至关重要。下面将详细阐述这两个方法的用法和应用场景。 1. `save()`方法: `save...
为提高性能,可以使用`ctx.save()`和`ctx.restore()`方法保存和恢复当前绘图状态,或者使用局部重绘,只对移动的矩形区域进行更新。 6. **动画效果**:如果希望矩形平滑移动,可以使用定时器和缓动函数来实现。在`...
一:canvas中的save和restore 一直以来没有特别明白canvas中的save()和restore()函数,这次终于通过微信小程序中使用此函数的时候弄明白了,以下代码可以运行在微信小程序中~~ 看效果: (此图片来源于网络,如有...
3. 在onDraw()方法中,首先调用canvas.save()保存当前的状态,以便后续可以恢复。 4. 使用canvas.translate()和canvas.scale()来设置平移和缩放操作。 5. 执行绘图操作,例如绘制矩形、圆形等。 6. 调用canvas....
在绘制过程中,我们可以使用save()和restore()方法来保存和恢复Canvas的状态。这对于进行多次绘制并且需要保持某些属性不变(如坐标变换或剪裁区域)的情况下非常有用。例如,在绘制机器人的不同部分时,可能会涉及...
`onDraw`方法中的`canvas.save()`和`canvas.restore()`用于保存和恢复画布的状态。`save()`在调用时会记录当前画布的所有属性,包括剪裁区域,然后在后续的`restore()`调用中恢复到保存的状态。这样可以确保在复杂的...
另外,为了提高性能,可以考虑使用剪裁区域(`clip` 方法)或者保存/恢复状态(`save` 和 `restore` 方法)来避免不必要的重绘。如果视图树非常大,还可以采用分层渲染策略,只绘制可见部分或使用虚拟DOM技术优化。 ...
translate() 方法可以移动坐标系,rotate() 方法可以旋转坐标系,restore() 方法可以恢复之前的坐标系,save() 方法可以保存当前的坐标系。 Canvas 还提供了多种绘制方法,如 stroke() 方法绘制轮廓,strokeText()...
`restore`方法用于撤销最近一次调用`save`方法后的所有状态改变,包括`translate`和`rotate`,使得画布恢复到初始状态,以便下一次绘图。 通过以上步骤,我们可以成功地在Canvas上实现图片在原位置的旋转。这个例子...
- 使用`canvas.save()`保存当前Canvas的状态,防止坐标系变化影响其他元素。 - 通过`canvas.translate(0, -textHeight)`将坐标原点向上移动一个文本高度的距离,确保下一行文本在上一行的下方。 - 使用`paint....
`restore()`方法用来恢复之前保存的状态,它会弹出栈顶的状态并应用到Canvas上,从而撤销自上次`save()`之后所有的样式和变换更改。 ```javascript ctx.restore(); ``` #### 三、Canvas坐标系 - **translate...
在自定义View的onDraw()方法中,我们通常会获取到一个Canvas对象,然后在这个对象上进行绘制。 放大和缩小通常涉及到矩阵变换。Android的Matrix类提供了对2D变换的支持,包括缩放(scale)、平移(translate)和...
此外,还可以使用`clearRect`来清除指定区域,`save`和`restore`用于保存和恢复当前绘图状态。 在"image"文件中,可能包含了一个图像资源,我们可以利用Canvas API将图片加载到canvas上并进行处理。`drawImage`方法...
canvas.restore(); // 绘制分针 canvas.save(); canvas.rotate(minuteAngle, getWidth() / 2, getHeight() / 2); canvas.drawLine(getWidth() / 2, getHeight() / 2 - 150, getWidth() / 2, getHeight() / 2 +...
可以通过`canvas.save()`和`canvas.restore()`来保存和恢复Canvas的状态,实现组合绘制。这样可以在不干扰其他绘制的情况下进行局部变换,如平移、旋转、缩放。 7. **动画**: 若要使人物动起来,可以使用`...
在实际应用中,可能还会涉及到性能优化,例如通过保存和恢复状态(`save()` 和 `restore()`)来避免不必要的重绘,或者使用Web Workers来异步处理图像数据,以减少主线程的负担。 总的来说,“Canvas2D梯形拉伸”是...
默认情况下,Canvas的坐标原点位于视图左上角,但可以通过`save()`和`restore()`方法保存和恢复状态,改变旋转的基点。 ```java canvas.save(); canvas.rotate(angle, pivotX, pivotY); // 在此之后的绘制都会受到...