1. 程式人生 > >android程式設計之圖形繪製

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);  

     * 設定圖形重疊時的處理方式,如合併,取交集或並集,經常用來製作橡皮的擦除效果  

  • 文字繪製設定
     * setFakeBoldText(boolean fakeBoldText); 

     * 模擬實現粗體文字,設定在小字型上效果會非常差  

     * 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 GUIView繪製流程

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()函式?‪‬‪‬‪‬