Android-使用OpengGL實現的Canvas進行繪制(簡單介紹)

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地址進行查閱。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容