導航:首頁 > 操作系統 > androidcanvas坐標

androidcanvas坐標

發布時間:2022-10-09 03:15:38

android canvas.drawbitmap(bitmap,0,0,null)什麼意思

你是要實現圖畫功能的吧?這個很簡單理解。

canvas.drawbitmap()函數你可以理解為新建一個畫布, 就好比畫家的畫板,當然你不往裡面添加東西,就什麼都沒有,它是空的。現在放入參數, bitmap就是導入你已有的圖片,比如,畫家上次還沒畫完的一張圖片,現在放在畫板上,要繼續工作。參數,0,0,為設置這張畫在畫板上的放置的位置,0,0為x軸和y軸的坐標,如果是(0,0),則默認為從從左上角開始放置。下面的一張圖片為設置不同參數的時候,這種那個圖片放置在這個畫板上的位置的變化,你可以看到我設置為(100,10),也就是x坐標100,圖片離左邊距離為100;y坐標10,圖片離上方距離為10,你可以看到左邊黑色的部分佔了100,上邊部分的黑色佔了10.最後,就是那個null,null的參數是用來設置畫筆的,你沒有畫筆,當然就不用設了,你這個只是簡單的,見圖片顯示在畫板上,並沒有實現要在畫板上畫圖的功能 。你還想實現美妙顯示多少張圖片的話,我只能給你指示簡單的方向,就是你要設置一個定時器,在定時器裡面,加上你的這個函數,然後定時更改參數bitmap變數,這個bitmap是圖片的路徑,實現實現每秒多少貞,就是要設置定時器你每秒,你改變參數bitmap的頻率,關於這個問題,你還得學習下定時器,再說下去內容就多了,你還是自己先琢磨吧……
ps:其實這個函數還比較好理解,不好理解的是要開始實現畫圖的時候,要設置兩個這樣的,實現雙緩沖,這個比較難,多看看書吧,我也只能幫你到這里了。祝你學習快樂哈~我也正在學習。

② android canvas 畫圖 坐標是參照什麼

左上角是(0,0)android 是左收坐標系

③ android 使用canvas畫線,如何保證快速畫出圓滑的曲線

[mw_shl_code=java,true] RectF rect = new RectF(0, 0, radii, radii); // 圓形弧度需要的區域(左上角的x,y坐標 ,及右下角x,y坐標) Paint paint = new Paint(); paint.setColor(r.getColor(R.color.bg_color_1)); canvas.drawCircle(radii/2, radii/2, radii/2, paint);[/mw_shl_code]

④ Android Canvas 方法總結

在自定義 View的時候,我們經常需要繪制一些自己想要的效果。
這里就需要使用Canvas對象。
下面將Canvas對象常用方法做個筆記,方便記憶。

對Canvas的一系列操作,是指對Canvas進行旋轉、平移、縮放等操作。
這些操作可以讓Canvas對象使用起來更加便捷。

Canvas提供了幾個方法,讓我們可以方便的對Canvas的狀態進行更改和還原。
這些方法是: save() 、 restore() 、 restoreToCount(int saveCount) 。

我們在對Canvas進行平移、旋轉、放大等操作時候,可以調用 save() 方法,將當前修改過的Canvas狀態進行保存,調用 restore() 方法後,會將Canvas還原成最近的一個 save() 的狀態。

save() 方法還會有一個返回值,我們也可以調用 restoreToCount(int saveCount) 方法,將這個返回值作為參數傳遞進去,就可以將Canvas還原成某一個特定的 save() 狀態。

⑤ android canvas畫一條貫通屏幕的線,如何確定xy的坐標

你可以隨便搞個view,胡亂設一個背景色胡亂定個寬高,用一個相對布局把你自定義的view放在上面,隨便搞的view放在下面(相對布局可以重疊),然後設置這個隨便搞的view的左邊距,和你畫的線對齊了X坐標就確定了,同樣的道理上邊距就是Y坐標。

⑥ Android 繪圖之Canvas相關API使用

Android 自定義控制項或多或少都會用到Canvas,那麼我們就需要熟悉它的API。Canvas給我們提供了大量的的DrawXXX方法,通過這些方法我們就可以繪制出我們想要的效果。接下來看看官方是怎麼說的:

大致意思就是說:
Canvas類持有「draw」調用。 要繪制一些東西,你需要4個基本組件:一個點陣圖來保存像素,一張畫布(Canvas)來主持繪圖調用(寫入點陣圖),一個繪圖圖元(如Rect,Path,text,Bitmap)和一支畫筆(描述繪圖的顏色和樣式)。

首先介紹下畫筆(Paint)的常用API:

Paint默認的字體大小為12px,在繪制文本時我們往往要考慮密度density設置合適的字體大小。畫筆的默認顏色為黑色,默認的style為FILL,默認的cap為BUTT,默認的線寬為0。

單一顏色填充Canvas畫布

以上就是大部分的繪制操作,當然還有一些沒介紹到,還有一些需要在API21(5.0)以上才能使用,這個使用到的時候可以弄個小demo看下效果,接下來介紹下針對畫布變換和畫布裁剪做一些介紹。

在學習繪制操作的時候很多地方都使用到了translate 和rotate 這里就不再對它們進行操作

1.畫布scale

2.畫布skew

這里針對Canvas的API進行了一些說明,希望對大家有所幫助。沒有添加完整工程上來,但是每一個方法都是實際跑過的,只需要在onDraw中調用就可以看到效果了。

⑦ Android繪圖基礎--Canvas和Drawable

Github鏈接

畫2D圖形有兩種方法:

Canvas實際上是封裝了各種draw方法的類,調用draw方法把圖形繪制到底層的Surface上,即繪制在Window上。

這個例子中構造了兩個Canvas和一個Bitmap,分別調用其draw方法,先是mCanvas往Bitmap里繪制一個方塊,再在onDraw方法內調用canvas.drawBitmap繪制這個方塊。

思考一個問題,為什麼mCanvas需要設置Bitmap?

很簡單,因為它沒有持有一塊內存地址,自然沒法繪制。來看一下draw的起點ViewRootImpl(軟體繪制,不開啟硬體加速下)。

這個通過mSurface.lockCanvas返回的Canvas是View.draw的canvas變數,所以當1,2情況時,Canvas都持有一個Bitmap,指向共享內存里的某一小塊,當調用Canvas.draw方法時就能繪制出東西。但對於自定義Canvas來說並不是,即使設置一個Bitmap和繪制了Bitmap,但不往共享內存上寫,屏幕上是不會顯示的,SurfaceView同理,通過Surface.lockCanvas獲取持有共享內存的Canvas,繪制完畢後調用Surface.unlockCanvasAndPost把繪制內容顯示到surface上並release掉Canvas。

順帶一提Canvas.save和Canvas.restore方法,如下Demo

效果圖如

畫的是三個顏色和旋轉角度都不同的小方形。

步驟1把默認坐標系旋轉20°,畫出第一個藍色的方形,步驟2保存當前的matrix(旋轉了20°),繼續旋轉20°,此時坐標系已經旋轉了40°,畫出第二個黃色的方塊,步驟3,恢復上一步保存的matrix(旋轉了20°),此時坐標系還是旋轉了20°,步驟4,再旋轉40°,此時坐標系旋轉了60°,畫出第三個黑色方塊。

Canvas.save用於保存當前matrix和clip,Canvas.restore用於恢復上次保存的matrix和clip。

Drawable是一個能畫出來的物體的抽象,使用前需要調用setBounds確定位置和大小,通過getIntrinsicHeight和getIntrinsicWidth取到實際大小。Drawable可以有幾種形式存在:Bitmap、Nine Patch、Vector、Shape、Layers等。

從Resource.getDrawable會判斷是否.xml結尾,不是的話走6,7步,如果從xml中讀取,需要getResource.getDrawable -> ResourceImpl.loadDrawableForCookie -> drawable.createFromXml -> DrawableInflater.inflateFromXmlForDensity -> drawable.inflateFromTag

看一下Shape實現類GradientDrawable的inflate實現,讀取各項屬性並賦值,到draw方法。

調用canvas.drawRect把mRect畫出來,而mRect的賦值在ensureValidRect。[圖片上傳失敗...(image-a25af0-1515826613001)]

bounds在哪裡設置的?答案是ImageView.updateDrawable內,會調用Drawable.getIntrinsicHeight賦值(從xml中size屬性讀取),再調用configureBounds -> setBounds,如果使用的不是ImageView,一定要在draw之前 調用setBounds ,否則size就會出錯。

回到loadDrawableForCookie,再看一下6,7步載入圖片的過程,通過AssetManager讀取圖片流數據,通過Drawable.createFromResourceStream這個我們經常使用的方法獲取到Drawable。

取到屏幕密度之後調用BitmapFactory.decodeResourcesStream,計算密度後調用native創建Bitmap,感興趣的同學可以看下更具體的分析文章(如 理解Bitmap )。

本文探究了兩點

Android 7.1.1 源碼

Android 官方文檔, Canvas and Drawable , Drawable 等

⑧ Android canvas繪制的可滑動刻度尺

首先放上所有成員變數

以上用到的方法

本Demo是使用Canvas進行繪制刻度,為了適配不同寬度的屏幕,所以小的刻度使用從中心指針處向兩邊繪制到屏幕邊界的方法,使用GestureDetector接管View的觸摸事件,在onScroll中修改體重值並不斷進行重繪,達到刻度尺滾動的效果。並在onFling中接收拋動的事件,開啟一個屬性動畫達到平滑的效果。由於我沒有在GestureDetector中找到能響應不fling的up事件,所以要自己手動在onTouchEvent中寫ACIONT_UP時的動作

遮罩層的實現方式,是drawRec 一個整個畫布大小的白色矩形,使用線性漸變,兩邊不透明到中間透明。注意,由於使用了PorterDuff.Mode.MULTIPLY來合成,所以需要使用到離屏緩沖,關於離屏緩沖可以看看 HenCoder
最後附上github: https://github.com/Pro47x/BodyWeightScaleTableView

⑨ android怎麼移動canvas

我們可以把這個Canvas理解成系統提供給我們的一塊內存區域(但實際上它只是一套畫圖的API,真正的內存是下面的Bitmap),而且它還提供了一整套對這個內存區域進行操作的方法,所有的這些操作都是畫圖API。也就是說在這種方式下我們已經能一筆一劃或者使用

Graphic來畫我們所需要的東西了,要畫什麼要顯示什麼都由我們自己控制。
這種方式根據環境還分為兩種:一種就是使用普通View的canvas畫圖,還有一種就是使用專門的SurfaceView的canvas來畫圖。兩種的主要是區別就是可以在SurfaceView中定義一個專門的線程來完成畫圖工作,應用程序不需要等待View的刷圖,提高性能。前面一種適合處理量比較小,幀率比較小的動畫,比如說象棋游戲之類的;而後一種主要用在游戲,高品質動畫方面的畫圖。

Paint 代表了Canvas上的畫筆、畫刷、顏料等等;
Paint類常用方法:
setARGB(int a, int r, int g, int b) // 設置 Paint對象顏色,參數一為alpha透明值
setAlpha(int a) // 設置alpha不透明度,范圍為0~255
setAntiAlias(boolean aa) // 是否抗鋸齒
setColor(int color) // 設置顏色,這里Android內部定義的有Color類包含了一些常見顏色定義
setTextScaleX(float scaleX) // 設置文本縮放倍數,1.0f為原始
setTextSize(float textSize) // 設置字體大小
setUnderlineText(booleanunderlineText) // 設置下劃線

// 1、將會以顏色ARBG填充整個控制項的Canvas背景
//mCanvas.drawARGB(122, 10, 159, 163) ;
// 2、將會以顏色ARBG填充整個控制項的Canvas背景
//mCanvas.drawColor(Color.BLUE) ;
// 3、繪制顏色,但是要制定一個mode
//mCanvas.drawColor(Color.BLUE, Mode.SCREEN) ;
// 4、畫背景,跟2等效
//mCanvas.drawPaint(mPaint) ;
// 5、畫一個點
//mCanvas.drawPoint(23, 23, mPaint) ;
// 6、畫很多點這里的float[] 表示{x0,y0,x1,y1,x2,y2,x3,y3.....}
//mCanvas.drawPoints(new float[]{10,11,10,12,10,13,10,14,10,15,10,16}, mPaint) ;
// 7、畫線
//mCanvas.drawLine(...) ;
// 8、畫長方形 Rect 和RectF的區別?
//精度不一樣,Rect是使用int類型作為數值,RectF是使用float類型作為數值
//Rect r = new Rect(10,10,50,50) ;
//mCanvas.drawRect(r, mPaint) ;
//RectF rf = new RectF(10,10,50,50) ;
//mCanvas.drawRect(rf, mPaint) ;
//mCanvas.drawRect(10, 10, 50, 50, mPaint) ;
// 9、畫橢圓 初始化RectF的參數是(left,top,right,bottom)
//RectF rf = new RectF(100,100 ,200 ,250) ;
//mCanvas.drawOval(rf, mPaint) ;
// 10、畫圓 (圓心x0,圓心y0,半徑,paint)
//mCanvas.drawCircle(100, 100, 50, mPaint) ;
// 11、畫圓弧 RectF對象表明內切矩形的(left,top,right,bottom)
//RectF rf = new RectF(100 ,100 ,200 ,200) ;
// 參數(rf,startAngle ,angle ,sweepAngle ,paint) sweepAngle表明是否顯示圓弧三角形 angle畫多少度
//mCanvas.drawArc(rf, 60, 30, true, mPaint) ;
// 12、繪制圓角矩形 RectF是矩形的(left,top,right,bottom)
//RectF rf = new RectF(100 ,100 ,200 ,200) ;
// 50表明x方向的半徑,20表示y方向的半徑
//mCanvas.drawRoundRect(rf, 50, 20, mPaint) ;
// 13、畫任意多邊形
//Path path = new Path() ;
//path.moveTo(100, 100) ;
//path.lineTo(200, 200) ;
//path.lineTo(300, 200) ;
//mCanvas.drawPath(path, mPaint) ;
// 14、通過Path對象,也可以畫其他的圖形
//Path path = new Path() ;
//path.addCircle(100, 100, 20, Path.Direction.CCW) ;
//mCanvas.drawPath(path ,mPaint);

/*drawBitmap
drawText
drawPicture*/

/*Rect r = new Rect(100,100,200,200) ;
ByteArrayOutputStream out = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg) ;
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out) ;
InputStream in = new ByteArrayInputStream(out.toByteArray()) ;
*/
/*Picture picture = Picture.createFromStream(mContext.getResources().openRawResource(R.raw.bg)) ;
mCanvas.drawPicture(picture) ;*/

// 15、畫bitmap對象
//mCanvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg),100, 100, mPaint) ;

// 16、Matrix中包含了對Bitmap的處理操作
/*Matrix m = new Matrix() ;
m.postScale(2, 2) ;
m.postRotate(60) ;
mCanvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg), m, mPaint) ;*/

// 17、畫帶Matrix參數的bitmap,經過Matrix對象可以對bitmap做相關的處理,比如旋轉,縮放,移動等《關於Matrix的使用另行總結》
/*Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg) ;
Matrix m = new Matrix() ;
m.postScale(2, 2) ;
m.postRotate(60) ;
m.postTranslate(300, 300) ;
mCanvas.drawBitmap(bitmap, m, mPaint) ;*/
//mCanvas.drawBitmap(....) ; 暫不總結
// 18、畫文字
//mCanvas.drawText(123, 10, 10, mPaint) ;

//mCanvas.drawText(....)

⑩ android之canvas的坐標在canvas旋轉後會變化嗎

得看你如何設置咯,如果canvas也旋轉了就不會變,如果沒有的話,那肯定會咯

閱讀全文

與androidcanvas坐標相關的資料

熱點內容
像阿里雲一樣的伺服器 瀏覽:318
水冷空調有壓縮機嗎 瀏覽:478
訪問日本伺服器可以做什麼 瀏覽:430
bytejava詳解 瀏覽:446
androidjava7 瀏覽:384
伺服器在山洞裡為什麼還有油 瀏覽:885
天天基金app在哪裡下載 瀏覽:972
伺服器軟路由怎麼做 瀏覽:289
冰箱壓縮機出口 瀏覽:225
OPT最佳頁面置換演算法 瀏覽:642
網盤忘記解壓碼怎麼辦 瀏覽:852
文件加密看不到裡面的內容 瀏覽:651
程序員腦子里都想什麼 瀏覽:431
oppp手機信任app在哪裡設置 瀏覽:185
java地址重定向 瀏覽:270
一年級下冊摘蘋果的演算法是怎樣的 瀏覽:448
程序員出軌電視劇 瀏覽:90
伺服器系統地址怎麼查 瀏覽:56
解壓游戲發行官 瀏覽:603
國外小伙解壓實驗 瀏覽:338