Android-使用OpengGL实现的Canvas进行绘制(简单介绍)
首发地址:
http://blog.csdn.net/fzl562410663/article/details/53074511
本文简单介绍一个Github开源库:
android-openGL-canvas
这个开源库的特点是提供一个类似 Android 的 canvas 那样的类。我们可以继承它的 GLTextureView 来实现自定义View, 接着就可以使用它的canvas来画自己想画的东西了。例如:
public class MyGLView extends GLTextureView {
public MyGLView(Context context) {
super(context);
}
public MyGLView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onGLDraw(ICanvasGL canvas) {
// draw things with canvas here
}
}
和传统的自定义View不同,这个View是在自己的线程画的,而不是主线程。
- Canvas的用例
canvas.drawBitmap(textBitmap, left, top);
// transform
canvas.save();
canvas.rotate(rotateDegree, x, y);
canvas.drawBitmap(bitmap, left, top);
canvas.restore();
// or
CanvasGL.BitmapMatrix matrix = new CanvasGL.BitmapMatrix();
matrix.postScale(2.1f, 2.1f);
matrix.postRotate(90);
canvas.drawBitmap(bitmap, matrix);
// apply filter to the bitmap
textureFilter = new ContrastFilter(2.8f);
canvas.drawBitmap(bitmap, left, top, textureFilter);
是不是跟普通的canvas很像?
- 因为使用OpenGL,所以绘制效率高,亲测比硬件加速的View效率高一点,比没有硬件加速的View效率高很多。
- 如果需要自定义连续不断的动画,可以考虑使用它的GLContinuousTextureView,可以作为对SurfaceView和GLSurfaceView的替代品,比SurfaceView效率高很多。用法跟上边的例子一样,只是它的onGLDraw会无限循环地调用,达到不断绘制地效果。不过记得调用onResume和onPause。
- 它的 Canvas 可以使用 OpenGL 进行高效的图像处理,上方textureFilter就是例子。例如调节对比度,打马赛克之类的。它的处理方式跟一著名的图像处理库
GPUImage差不多。
效果:
还能与 Camera 结合
详细的请进入github地址进行查阅。