在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿。其实Android自带了解决方式。
方法一:给Paint加上抗锯齿标志。然后将Paint对象作为参数传给canvas的绘制方法。
paint.setAntiAlias(true);
方法二:给Canvas加上抗锯齿标志。
有些地方不能用paint的,就直接给canvas加抗锯齿,更方便。
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
测试代码如下:
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.view.View;
public class MyView extends View {
private PaintFlagsDrawFilter pfd;
private Paint mPaint = new Paint();
private Matrix matrix = new Matrix();;
private Bitmap bmp;
public MyView(Context context) {
super(context);
initialize();
}
private void initialize() {
pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
mPaint.setAntiAlias(true);
matrix.setRotate(30);
matrix.postScale(0.5f, 0.5f);
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.show);
}
@Override
public void dispatchDraw(Canvas canvas) {
canvas.translate(100, 0);
canvas.drawBitmap(bmp, matrix, null);
canvas.translate(0, 250);
canvas.drawBitmap(bmp, matrix, mPaint);
canvas.setDrawFilter(pfd);
canvas.translate(0, 250);
canvas.drawBitmap(bmp, matrix, null);
}
}
下图是效果:
可以看出,两种方式都挺有效的。
分享到:
相关推荐
方法一:给Paint加上抗锯齿标志。然后将Paint对象作为参数传给canvas的绘制方法。 paint.setAntiAlias(true); 方法二:给Canvas加上抗锯齿标志。 有些地方不能用paint的,就直接给canvas加抗锯齿,更方便。 ...
为了解决这个问题,Android提供了两种主要的抗锯齿方法,分别针对`Paint`对象和`Canvas`对象。 方法一:给`Paint`加上抗锯齿标志 当我们在画布上绘制图形或文字时,可以通过设置`Paint`对象的属性来开启抗锯齿功能...
通过设置Paint的属性,可以改变绘制的颜色、透明度、抗锯齿效果等,从而实现丰富的视觉效果。 3. **Path对象** Path用于构建复杂的路径,可以组合直线、曲线和弧线。在Canvas上,你可以用drawPath()方法结合Path...
例如,可以设置颜色模式(ColorMode),选择不同的刷子样式(StrokeCap, StrokeJoin),调整抗锯齿效果,甚至添加阴影。同时,Paint还支持文字测量和绘制,以及自定义画笔效果。 总的来说,Android画图涉及到的内容...
在画图过程中,我们可以设置不同的Paint对象来改变线条宽度、颜色、抗锯齿效果等,以达到丰富的绘图效果。 3. **MotionEvent**: 在Android中,用户的触摸事件由MotionEvent对象表示。开发者需要监听onTouchEvent()...
在Android的Canvas绘图中,当绘制线条或形状时,如果开启了抗锯齿,系统会自动对图形边缘进行颜色混合,使得边缘与背景之间的过渡更加自然,避免出现明显的像素级硬边缘。 2. **`setFilterBitmap()` 方法**: `...
- `setAntiAlias(boolean antiAlias)`: 设置抗锯齿。 **使用示例** ```java Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); canvas....
- 可以通过`Paint`设置填充色、描边色、抗锯齿、文字大小、字体等。 - 使用`canvas.save()`和`canvas.restore()`来保存和恢复绘图状态,便于进行复杂的图形变换。 3. **坐标系统与变换** - Android的坐标系统...
`Paint`对象还包含许多其他属性,如画笔样式、抗锯齿效果等,都可以根据需求进行调整。 4. **橡皮擦功能**: 橡皮擦功能通常通过设置`Paint`的`Xfermode`为`PorterDuff.Mode.CLEAR`来实现。这会让画笔清除覆盖的...
在Android平台上,开发一款画图工具是一个常见的需求,这通常涉及到图形用户界面...通过实际操作源码,你可以更直观地了解Android绘图的流程,这对于开发自己的Android画图应用或者其他图形密集型应用是非常有价值的。
Paint对象还可以指定抗锯齿、混合模式、阴影效果等高级特性,使得开发者能够创造出丰富多彩的应用界面。 ### 二、Paint的主要功能与属性 #### 1. 设置颜色与透明度 - **setColor(int color)**:设置绘制的颜色。 -...
通过`Canvas`,我们可以调用`drawPath()`、`drawRect()`等方法来绘制各种形状,并使用`Color`类设置线条的颜色,`Paint`类可以配置线条宽度、样式、抗锯齿效果等。`Path`类则用于构建复杂的绘图路径。 源码可能还...
- `setAntiAlias(boolean aa)`: 设置抗锯齿。 - **主要功能**: - 文本绘制: 如`canvas.drawText(String text, float x, float y, Paint paint)`。 - 形状绘制: 如`canvas.drawCircle(float cx, float cy, float ...
- `setPaint()`: 使用Paint对象设置更复杂的绘图属性,如颜色、样式、抗锯齿、文本大小等。 - `save()`: 保存Canvas的状态,以便稍后恢复。 - `restore()`: 恢复之前保存的Canvas状态。 5. **坐标系统与变换** ...
- `Paint`对象则负责设置线条颜色、宽度、样式、抗锯齿等属性,它与Canvas配合,定义了绘制的视觉效果。 2. **触摸事件处理** - Android通过`MotionEvent`来处理触摸事件。开发者需要在Activity或View中重写`...
- `Paint`对象还可以用于设置抗锯齿效果,提高图形边缘的平滑度。 3. **绘制折线**: - 折线图的每个点由一对坐标(x, y)表示。首先,你需要一个二维数组或列表来存储这些点。 - 使用Canvas的`drawLine()`方法来...
- 设置线条宽度、样式(如虚线、实线)、抗锯齿等特性。 通过分析这个项目的源码,学习者不仅可以掌握 Android 应用的基本架构,还能深入了解图形绘制的原理和技巧,这对于提升 Android 图形界面设计能力大有裨益...
- `setAntiAlias()`:开启或关闭抗锯齿功能,提高图形边缘的平滑度。 - `setDither()`:启用或禁用图像抖动处理,改善颜色渲染效果。 - `setFilterBitmap()`:控制是否在动画中滤掉Bitmap的优化,以提高显示速度...