android程式設計之圖形繪製
android課堂作業要求做個五子棋遊戲,想想如果直接用控制元件可能速度會比較慢,因此就想用比較常規的遊戲程式設計方法,螢幕繪製.今天查了些資料,並做個整理.
跟其他的螢幕繪製機制一樣,android螢幕繪製也需要畫布,其次還需要畫筆,android的繪製機制可以描述成畫筆在畫布上的繪製過程.在android中畫布用Canvas類來表示,畫筆用Paint類來實現,這兩個類都在包android.graphics下面.
畫筆(Paint類)提供了顏色設定,樣式設定等畫筆的常規設定,這些設定可以分為兩類,一類是圖形繪製的相關設定,一類是文字繪製的相關設定.參考文章
- 圖形繪製類的相關設定:
* setARGB(int a,int r,int g,int b);
* 設定繪製的顏色,a代表透明度,r,g,b代表顏色值。
* setAlpha(int a);
* 設定繪製圖形的透明度。
* setColor(int color);
* 設定繪製的顏色,使用顏色值來表示,該顏色值包括透明度和RGB顏色。
* setAntiAlias(boolean aa);
* 設定是否使用抗鋸齒功能,會消耗較大資源,繪製圖形速度會變慢。
* setDither(boolean dither);
* 設定是否使用影象抖動處理,會使繪製出來的圖片顏色更加平滑和飽滿,影象更加清晰
* setFilterBitmap(boolean filter);
* 如果該項設定為true,則影象在動畫進行中會濾掉對Bitmap影象的優化操作,加快顯示速度,本設定項依賴於dither和xfermode的設定
* setMaskFilter(MaskFilter maskfilter);
* 設定MaskFilter,可以用不同的MaskFilter實現濾鏡的效果,如濾化,立體等 *
* setColorFilter(ColorFilter colorfilter);
* 設定顏色過濾器,可以在繪製顏色時實現不用顏色的變換效果
* setPathEffect(PathEffect effect);
* 設定繪製路徑的效果,如點畫線等
* setShader(Shader shader);
* 設定影象效果,使用Shader可以繪製出各種漸變效果
* setShadowLayer(float radius ,float dx,float dy,int color);
* 在圖形下面設定陰影層,產生陰影效果,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影的顏色
* setStyle(Paint.Style style);
* 設定畫筆的樣式,為FILL,FILL_OR_STROKE,或STROKE
* setStrokeCap(Paint.Cap cap);
* 當畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的圖形樣式,如圓形樣式Cap.ROUND,或方形樣式Cap.SQUARE
* setSrokeJoin(Paint.Join join);
* 設定繪製時各圖形的結合方式,如平滑效果等
* setStrokeWidth(float width);
* 當畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的粗細度
* setXfermode(Xfermode xfermode);
* 設定圖形重疊時的處理方式,如合併,取交集或並集,經常用來製作橡皮的擦除效果
- 文字繪製設定
* 模擬實現粗體文字,設定在小字型上效果會非常差
* setSubpixelText(boolean subpixelText);
* 設定該項為true,將有助於文字在LCD螢幕上的顯示效果
* setTextAlign(Paint.Align align);
* 設定繪製文字的對齊方向
* setTextScaleX(float scaleX);
* 設定繪製文字x軸的縮放比例,可以實現文字的拉伸的效果
* setTextSize(float textSize);
* 設定繪製文字的字號大小
* setTextSkewX(float skewX);
* 設定斜體文字,skewX為傾斜弧度
* setTypeface(Typeface typeface);
* 設定Typeface物件,即字型風格,包括粗體,斜體以及襯線體,非襯線體等
* setUnderlineText(boolean underlineText);
* 設定帶有下劃線的文字效果
* setStrikeThruText(boolean strikeThruText);
* 設定帶有刪除線的效果
如果說畫筆決定了畫的顏色、風格的話,那畫布則決定能畫那些元素,以及如何繪製這些元素。在Android中Canvas提供瞭如下方法用來繪製圖形元素。
boolean | (Path path) 使用指定路徑來裁剪圖形,canvas對此方法進行了多次過載,除了使用指定路徑來裁剪還可以使用矩形、範圍等方式, 此外還可以設定裁剪區域內的圖形疊加效果.如果相交、替換等。詳見方法(Path path, Region.Op |
void | (int color) 設定整個畫布的背景顏色 |
void | (int a, int r, int g, int b) 設定或奧博的背景顏色透明度資訊 |
void |
(RectF oval,
float startAngle, float sweepAngle, boolean useCenter, Paint paint)
繪製弧形 |
void |
(Bitmap bitmap, Matrix matrix, Paint paint)
繪製點陣圖,並設定點陣圖矩陣,android對點陣圖繪製方法進行了多次過載,詳見(Bitmap bitmap, Rect src, Rect dst, Paint paint)
(Bitmap bitmap,
int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)等 |
void | (float cx, float cy, float radius, Paint paint) 繪製圓形 |
void | (float startX, float startY, float stopX, float stopY, Paint paint) 繪製線段,此外Canvas還提供了繪製線段集合的方法. |
void | (Path path, Paint paint) 繪製路徑 |
void | (float x, float y, Paint paint) 繪製點,此外android還提供繪製點的集合 |
void | (float left, float top, float right, float bottom, Paint paint) 繪製矩形 |
void | (String text, float x, float y, Paint paint) 繪製文字 |
void | scale(float sx, float sy) 畫布縮放 |
void | (float dx, float dy) 畫布平移 |
void | (float degrees) 畫布旋轉 |
上面只是列舉了Canvas常用的繪圖方法,其中不少方法還被多次過載,在此不進行一一說明.
相關推薦
android程式設計之圖形繪製
android課堂作業要求做個五子棋遊戲,想想如果直接用控制元件可能速度會比較慢,因此就想用比較常規的遊戲程式設計方法,螢幕繪製.今天查了些資料,並做個整理. 跟其他的螢幕繪製機制一樣,android
Android 學習 之 圖形繪製篇 獲取要繪製的文字的寬度/長度
android自定義View繪製的時候,會有很多情況下要與字型打交道,涉及到字型寬度、高度的時候要特別注意一下幾個概念,見圖: baseLine:一行文字的底線。 Ascent: 字元頂部到baseLine的距離。 Descent: 字元底部到baseLine的距離。 Leading: 字元行間距。
ArcGIS Android API 應用開發之圖形繪製與長度面積量算
本文通過一個簡單的小Demo,向大家介紹如何使用ArcGIS Android API繪製點、線、面圖形,並且測量線的長度和多邊形的面積。 首先來看一下程式執行的效果圖: 實現上述功能,首先需要向地圖中新增一個GraphicsLayer,用來繪製Point、Poly
少兒程式設計之圖形程式設計
圖形化程式設計,現在最流行的是Scratch 。Scratch 是由美國麻省理工學院設計開發的,一款面向青少年的簡易程式設計工具。即使不會英語和鍵盤操作,使用者也可以真接使用中文圖形化進行程式設計,使用滑鼠拖動模組到程式編輯欄實現相應功能,輕鬆的建立動畫,遊戲。圖形化程式設計機構與品牌(可掃碼或點選檢視):圖
Android程式設計之指定ListView的item位置
很多情況,我們需要指定ListView中顯示Item的位置,如:當前已經滾動到後面,然後響應某個事件,要ListView回到頭部。 程式碼如下,其中mListView為ListView的物件: private void setListViewPos(int pos
Unity&Shader基礎篇-可程式設計GPU圖形繪製管線
Cg是最早的為可程式設計圖形硬體設計的高階程式語言。它是英偉達和微軟公司一起合作開發出來了語言,如果你非常熟悉C語言或者其他的程式語言,如C++、C#或者Java等,那對於Cg語言你將會非常容易掌握。
Android程式設計之Listener偵聽的N種寫法及實現原理
寫下這個題目時突然想起魯迅筆下的孔乙已,茴香豆的幾種寫法,頗有些咬文嚼字的味道。雖然從事手機程式設計多年,但一直使用的是C和C++程式設計,由於安卓早期只支援JAVA開發,所以對於時下如火如荼的安卓系統,我一直觀之而未入之。現在由於工作需要開始研究安卓程式設計,由於以前主要使
Android GUI之View繪製流程
private void performLayout(WindowManager.LayoutParams lp, int desiredWindowWidth, int desiredWindowHeight) { mLayoutRequested =
android程式設計之懸浮窗體
用過手機360和QQ手機管家等一些軟體的朋友,會發現,在這些應用中,會出現一個懸浮窗體,例如QQ手機管家中打電話的場景: 這種窗體除了會顯示外,還可以移動它的位置,並且一直顯示。除了關閉當前程式外,視窗不會主動消失。其實,它的使用原理也很簡單,就是借用了WindowMana
Android程式設計之DialogFragment原始碼詳解(一)
DialogFragment是Fragment家族成員之一,如果你把它簡單的理解成Dialog,那就錯了。它的確可以做作dialog顯示,還可以顯示出自己定義的Dialog或者AlertDialog,但它同時也是一個Fragment。 按照官方的話來理解就是,你既可以把它當
Android程式設計之Fragment使用動畫造成Unknown animation name: objectAnimator異常
在為Fragment做切換動畫,啟動後遇到了一個異常: Caused by: java.lang.RuntimeException: Unknown animation name: objectAnimator 截圖如下: 我的程式碼如下: fragment
Android程式設計之仿微信顯示更多文字的View
微信朋友圈中,如果好友發表的文字過長,會自動收縮起來,底下有提示,當點選“顯示更多”時才會展開。 首先定義佈局檔案(很簡單,不解釋): <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:
體驗Android程式設計之美
因為公司業務是做行情的,一般的短連線達不到這種頻繁更新資料的需求,所以長連線是必不可少的。 當下比較流行的三方框架我覺得就屬Mars了,多平臺都可以使用,而且最主要的是微信官方開源,瞬間逼格就上去了,在網路質量、日誌列印這些方面表現相對比較突出,所以就決定用M
Android 程式設計之天氣預報下來重新整理資料及城市容器配置--3
前面已經把活動和服務講了講,要注意的是服務的用法,我們在這裡是 extends IntentService implements LocationListener ,下面看下 IntentService IntentService是一個通過Context.startSer
“毛星雲OpenCV3程式設計入門之python實現”第六篇基本圖形繪製
4.3基本圖形繪製 python程式碼: # -*- coding: utf-8 -*- __author__ = 'sunzhilong' import cv2 import numpy as np image = np.zeros((600,600,3
Android圖形繪製之——貼圖的藝術
1.自定義view 2.重寫onDraw()方法 3.XML中引用 自定義view程式碼: public class MyView02 extends View{ private Bitm
Android 學習之《Android程式設計權威指南》第二版 程式碼+筆記整理(四)
(程式碼)GeoQuiz最終開發 GeoQuiz應用初步開發 GeoQuiz應用升級開發 解決GeoQuiz應用旋轉恢復第一題的BUG 不展示編譯器自動完成的程式碼,僅提供手動修改或者編寫的程式碼。 省略了先前一些程式碼,可參照上方連結。 升級內容: 增加作弊按鈕,給使用者提
Android響應式程式設計之RxJava2.0
前言 優點: 1、鏈式操作 2、非同步優化 實戰 先來個簡單的使用示例 Observable .create(new ObservableOnSubscribe<String>() {
android程式設計3 socket程式設計之udp傳送
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
mooc-python語言程式設計練習2-基本圖形繪製turtle
1.# 00390031003900310038427 哪個選項不能正確引用turtle庫進而使用setup()函式?