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差不多。
效果:
filters
還能與 Camera 結合
camera
詳細的請進入github地址進行查閱。