Android采用雙緩沖技術(shù)實(shí)現(xiàn)畫(huà)板
本文實(shí)例為大家分享了Android實(shí)現(xiàn)畫(huà)板的具體代碼,采用的技術(shù)是雙緩沖技術(shù),供大家參考,具體內(nèi)容如下
1.雙緩沖技術(shù)的概念
所謂的雙緩沖技術(shù)其實(shí)很簡(jiǎn)單,當(dāng)程序需要在指定的View上進(jìn)行繪制時(shí),程序并不需要直接繪制到該View組件,而是先繪制到一個(gè)內(nèi)存中的Bitmap圖片上(就是緩沖),等內(nèi)存中的Bitmap繪制好之后,再一次性將Bitmap繪制到View組件上。
2.Android采用雙緩沖實(shí)現(xiàn)畫(huà)板
實(shí)現(xiàn)的思路:
1).定義一個(gè)內(nèi)存中圖片,將他作為緩沖區(qū)Bitmap cacheBitmap = null;
2).定義緩沖區(qū)Cache的Canvas對(duì)象 Canvas cacheCanvas = null;
3).設(shè)置cacheCanvas將會(huì)繪制到內(nèi)存的bitmap上。
cacheCanvas.setBitmap(cacheBitmap);
4). 將cacheBitmap繪制到該View上.
canvas.drawBitmap(cacheBitmap,0,0,p);
3.代碼實(shí)現(xiàn)
package com.lidong.android_ibrary.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** *@類名 : DrawView *@描述 : 使用雙緩存技術(shù)實(shí)現(xiàn)繪制 *@時(shí)間 : 2016/4/26 9:18 *@作者: 李東 *@郵箱 : lidong@chni.com.cn *@company: chni */ public class DrawView extends View { float preX; float preY; private Path path; private Paint paint = null; private int VIEW_WIDTH = 800; private int VIEW_HEIGHT = 600; //定義一個(gè)內(nèi)存中圖片,將他作為緩沖區(qū) Bitmap cacheBitmap = null; //定義緩沖區(qū)Cache的Canvas對(duì)象 Canvas cacheCanvas = null; public DrawView(Context context) { this(context,null); } public DrawView(Context context, AttributeSet attrs) { super(context, attrs); //創(chuàng)建一個(gè)與該VIew相同大小的緩沖區(qū) cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH,VIEW_HEIGHT,Bitmap.Config.ARGB_8888); //創(chuàng)建緩沖區(qū)Cache的Canvas對(duì)象 cacheCanvas = new Canvas(); path = new Path(); //設(shè)置cacheCanvas將會(huì)繪制到內(nèi)存的bitmap上 cacheCanvas.setBitmap(cacheBitmap); paint = new Paint(); paint.setColor(Color.RED); paint.setFlags(Paint.DITHER_FLAG); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); paint.setAntiAlias(true); paint.setDither(true); } @Override protected void onDraw(Canvas canvas) { Paint p = new Paint(); //將cacheBitmap繪制到該View canvas.drawBitmap(cacheBitmap,0,0,p); canvas.drawPath(path,paint); } @Override public boolean onTouchEvent(MotionEvent event) { //獲取拖動(dòng)時(shí)間的發(fā)生位置 float x = event.getX(); float y = event.getY(); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: path.moveTo(x,y); preX = x; preY = y; break; case MotionEvent.ACTION_MOVE: path.quadTo(preX,preY,x,y); preX = x; preY = y; break; case MotionEvent.ACTION_UP: //這是是調(diào)用了cacheBitmap的Canvas在繪制 cacheCanvas.drawPath(path,paint); path.reset(); break; } invalidate();//在UI線程刷新VIew return true; } }
4.實(shí)現(xiàn)的效果
代碼下載:Android實(shí)現(xiàn)畫(huà)板代碼
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)Android軟件編程有所幫助。
- android實(shí)現(xiàn)簡(jiǎn)單的畫(huà)畫(huà)板實(shí)例代碼
- Android實(shí)現(xiàn)畫(huà)板、寫(xiě)字板功能(附源碼下載)
- Android自定義SurfaceView實(shí)現(xiàn)畫(huà)板功能
- Android畫(huà)板開(kāi)發(fā)之添加背景和保存畫(huà)板內(nèi)容為圖片
- Android畫(huà)板開(kāi)發(fā)之橡皮擦功能
- Android實(shí)現(xiàn)畫(huà)畫(huà)板案例
- Android編程實(shí)現(xiàn)畫(huà)板功能的方法總結(jié)【附源碼下載】
- Android畫(huà)板開(kāi)發(fā)之撤銷反撤銷功能
- Android多媒體之畫(huà)畫(huà)板開(kāi)發(fā)案例分享
- Android自定義View實(shí)現(xiàn)簡(jiǎn)易畫(huà)板功能
相關(guān)文章
Android RecyclerView區(qū)分視圖類型的Divider的實(shí)現(xiàn)
本篇文章主要介紹了Android RecyclerView區(qū)分視圖類型的Divider的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Android PopupWindow使用方法小結(jié)
這篇文章主要為大家詳細(xì)介紹了Android PopupWindow使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Android通過(guò)json向MySQL中讀寫(xiě)數(shù)據(jù)的方法詳解【寫(xiě)入篇】
這篇文章主要介紹了Android通過(guò)json向MySQL中讀寫(xiě)數(shù)據(jù)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android json類的定義、調(diào)用及php接收json數(shù)據(jù)并寫(xiě)入mysql的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-06-06android非RxJava環(huán)境下使用Handler實(shí)現(xiàn)預(yù)加載
這篇文章主要介紹了android非RxJava環(huán)境下使用Handler實(shí)現(xiàn)預(yù)加載的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Flutter實(shí)現(xiàn)自定義搜索框AppBar的示例代碼
開(kāi)發(fā)中,頁(yè)面頭部為搜索樣式的設(shè)計(jì)非常常見(jiàn),為了可以像系統(tǒng)AppBar那樣使用,本文將利用Flutter自定義一個(gè)搜索框,感興趣的可以了解一下2022-04-04Android實(shí)戰(zhàn)APP啟動(dòng)速度優(yōu)化
本篇文章給大家通過(guò)實(shí)戰(zhàn)總結(jié)了Android開(kāi)發(fā)APP啟動(dòng)速度優(yōu)化的方法以及需要注意的地方,有需要的朋友可以參考下。2018-05-05Android 使用Vitamio打造自己的萬(wàn)能播放器(8)——細(xì)節(jié)優(yōu)化
本文主要介紹Android Vitamio開(kāi)發(fā)播放器,這里給大家提供了一些小的細(xì)節(jié)優(yōu)化,更加完善播放器的功能,希望能幫助有需要的小伙伴2016-07-07Kotlin開(kāi)發(fā)的一些實(shí)用小技巧總結(jié)
Kotlin 是一個(gè)基于 JVM 的新編程語(yǔ)言,用 JetBrains 的話來(lái)說(shuō)是「更現(xiàn)代化、更強(qiáng)大,所以下面這篇文章主要給大家總結(jié)介紹了關(guān)于Kotlin的一些開(kāi)發(fā)實(shí)用小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-10-10