Android-使用OpengGL實(shí)現(xiàn)的Canvas進(jìn)行繪制(簡(jiǎn)單介紹)
首發(fā)地址:
http://blog.csdn.net/fzl562410663/article/details/53074511
本文簡(jiǎn)單介紹一個(gè)Github開(kāi)源庫(kù):
android-openGL-canvas
這個(gè)開(kāi)源庫(kù)的特點(diǎn)是提供一個(gè)類似 Android 的 canvas 那樣的類髓废。我們可以繼承它的 GLTextureView 來(lái)實(shí)現(xiàn)自定義View, 接著就可以使用它的canvas來(lái)畫(huà)自己想畫(huà)的東西了。例如:
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
}
}
和傳統(tǒng)的自定義View不同该抒,這個(gè)View是在自己的線程畫(huà)的慌洪,而不是主線程。
- 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很像凑保?
- 因?yàn)槭褂肙penGL冈爹,所以繪制效率高,親測(cè)比硬件加速的View效率高一點(diǎn)欧引,比沒(méi)有硬件加速的View效率高很多频伤。
- 如果需要自定義連續(xù)不斷的動(dòng)畫(huà),可以考慮使用它的GLContinuousTextureView芝此,可以作為對(duì)SurfaceView和GLSurfaceView的替代品憋肖,比SurfaceView效率高很多。用法跟上邊的例子一樣婚苹,只是它的onGLDraw會(huì)無(wú)限循環(huán)地調(diào)用岸更,達(dá)到不斷繪制地效果。不過(guò)記得調(diào)用onResume和onPause租副。
- 它的 Canvas 可以使用 OpenGL 進(jìn)行高效的圖像處理坐慰,上方textureFilter就是例子较性。例如調(diào)節(jié)對(duì)比度用僧,打馬賽克之類的。它的處理方式跟一著名的圖像處理庫(kù)
GPUImage差不多赞咙。
效果:
filters
還能與 Camera 結(jié)合
camera
詳細(xì)的請(qǐng)進(jìn)入github地址進(jìn)行查閱责循。