在Android中,目前,我知道有两种出现锯齿的情况。

1)当我们用Canvas绘制位图的时候,如果对位图进行了选择,则位图会出现锯齿。

2)在用View的RotateAnimation做动画时候,如果View当中包含有大量的图形,也会出现锯齿。

我们分别以这两种情况加以考虑。

一,用Canvas绘制位的的情况。

在用Canvas绘制位图时,一般地,我们使用drawBitmap函数家族,在这些函数中,都有一个Paint参数,要做到防止锯齿,我们就要使用到这个参数。

如下:首先在你的构造函数中,需要创建一个Paint。

Paint mPaint = new Paint()

然后,您需要设置两个参数:

1) mPaint.setAntiAlias();

2) mPaint.setBitmapFilter(true)。

第一个函数是用来防止边缘的锯齿,第二个函数是用来对位图进行滤波处理。最后,在画图的时候,调用drawBitmap函数,只需要将整个Paint传入即可。

二,RotateAnimation

有时候,当你做RotateAnimation时,你会发现,讨厌的锯齿又出现了。这个时候,由于你不能控制位图的绘制,只能用其他方法来实现防止锯齿。另外,如果你画的位图很多。不想每个位图的绘制都传入一个Paint。还有的时候,你不可能控制每个窗口的绘制的时候,您就需要用下面的方法来处理------对整个Canvas进行处理。

1)在您的构造函数中,创建一个Paint滤波器。

PaintFlagsDrawFilter mSetfil = new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG);

第一个参数是你要清除的标志位,第二个参数是你要设置的标志位。此处设置为对位图进行滤波。

2)当你在画图的时候,如果是View则在onDraw当中,如果是ViewGroup则在dispatchDraw中调用如下函数。

canvas.setDrawFilter( mSetfil );

三,Drawable

最后,另外,在Drawable类及其子类中,也有函数setFilterBitmap可以用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果。


更多相关文章

  1. C语言函数的递归(上)
  2. 一起学android之利用回调函数onCreateDialog实现加载对话框(23)
  3. Android将camera获取到的YuvData在jni中转化为Mat方法
  4. android 开发零起步学习笔记(十一):界面切换+几种常用界面切换效果
  5. 浅谈:Android(安卓)TextView的append方法与滚动条同时使用
  6. android ViewFlipper使用示例(注册引导页)
  7. Android跨进程通信IPC之3——Bionic
  8. android 中JNI开发中如何使用Socket
  9. binder机制详解

随机推荐

  1. Android系统(245)---SystemServer进程的创
  2. Android 照相机
  3. Android视频播放项目总结之 使用第三方Vi
  4. android 发送邮件--实现 send email for
  5. Android之——自己定义TextView
  6. SharePreferences源码分析(SharedPreferen
  7. android自学笔记《一》——android简介
  8. Android构建与配置Gradle脚本综述
  9. Android Launcher抽屉类SlidingDrawer的
  10. Android 应用程序不能全屏显示