平面繪圖與動畫.

Slides:



Advertisements
Similar presentations
计算机动画与仿真. 计算机动画是计算机图形学和艺术相结合 的产物,它是伴随着计算机硬件和图形算 法高速发展起来的一门高新技术,它综合 利用计算机科学、艺术、数学、物理学和 其它相关学科的知识在计算机上生成绚丽 多彩的连续的虚拟真实画面,给人们提供 了一个充分展示个人想象力和艺术才能的 新天地。 计算机动画是计算机图形学和艺术相结合.
Advertisements

意义和证实 〔德〕莫里茨 · 石里克. 莫里茨 · 石里克( Moritz Schlick, ) 维也纳学派的奠基人和指导英才莫里 茨 · 石里克 1882 年 4 月 14 日出生在德 国柏林的一个贵族家庭。 1904 年在 柏林大学在著名物理学家马克斯 · 普 朗克指导下完成了博士论文.
颐高集团项目中心 海亮地产开发模式研究报告. 目 录 目 录 第四部分:海亮地产高周转模式执行 第二部分:海亮地产高周转模式原因 第三部分:海亮地产高周转模式内涵 第一部分:海亮地产企业背景 第五部分:海亮地产高周转支撑体系.
商管群科科主任 盧錦春 年 3 月份初階建置、 4 月份進階建置、 5 月份試賣與對外營業。
Android ADT + Android SDK Eclipse Eclipse 編輯器 JAVA JAVA 開發工具.
Android开发入门 -----第一个Android程序 主讲:李晓蕾
杭州中学数学网: 第三章《直线与方程》 第四章《圆与方程》 《解析几何初步》 教学解读 杭州市教育局教研室 李学军 联系电话 电子信箱 杭州中学数学网:
第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
系统简介 理财顾问 业务 是基于通信平台的技术优势,整合《理财周刊》、第一理财网、乾隆集团等合作伙伴提供的理财产品内容和权威的理财专家资源,以集中式呼叫中心为主的服务方式,让普通百姓可以享受到快捷、全面、专业、权威的资讯及投资理财的服务平台。
99年成語200題庫(21-40).
四資二甲 第三週作業 物件導向程式設計.
复习提问: ★罗斯福新政最为深远的影响是什么? 开创了国家干预经济的新模式,逐渐形成了国家垄断资本主义.
職業災害調查及善後處理.
宦官那些事儿 宦官那些事儿 主讲:小学部李永善 主讲:小学部李永善.
實驗五:多媒體播放器選單介面.
地價稅簡介.
第八章 Android游戏开发 瞿绍军
第七章 多媒体开发.
电视教育课 【5】 小学生行为习惯养成教育.
“深入推进依法行政加快建设法治政府” -《法治政府建设实施纲要》解读
第三章 鏈結串列 Linked List.
第六节 可降阶的二阶微分方程 一、 型的微分方程 二、 型的微分方程 三、 型的微分方程.
生育保险 朝阳社保中心支付部:黄玮.
宁波爱地房产市场年报 郊五区
第1章 大家都来学化学 化学·新课标(KY).
升學應選擇符合自己性向、興趣或能力的學校就 讀,有五專、高職、高中、綜合高中或進修學校, 可要多花些時間了解一下哦!
税务认定 永州市国家税务局纳税人学校.
浙江省温州苍南第二高级中学 教师:王志国.
《环游西藏》之二 碧玉湖 音乐《白塔》 摄制:C&Y.
二维变换 计算机科学与技术系.
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
第11章 Android GPS位置服务与地图编程
9.1 圓的方程 圓方程的標準式.
概率论与数理统计模拟题(3) 一.填空题 3且 1.对于任意二事件A 和 B,有P(A-B)=( )。 2.设 已知
第9章 Android图形图像处理 QQ号: QQ群: (Android编程-清华版)
第6章 图形与图像处理.
車輛引擎聲浪模擬系統 指導老師 陳璽煌 專題組員 鄭俊孝 曾世豪 楊淑雅 曾鈺棻.
C#图形程序设计基础 1 GDI+绘图基础 2 基本图形的绘制 3 实用图形程序设计.
專題報告 組員:吳家齊,江弘喻.
第13章 学院介绍 --选项卡切换效果 授课老师:高成珍 QQ号: QQ群: 、
Web前端开发技术与实践 第11章:背景与边框 阮晓龙 /
第6章 图像与图形处理 QQ号: QQ群: (Android编程入门) 网络资源:
第6章 建立Android使用介面 6-1 介面元件的基礎 6-2 Android的事件處理 6-3 按鈕元件 6-4 文字元件
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
可降阶的高阶方程 一、 型的微分方程 二、不显含未知函数的方程 三、不显含自变量的方程.
C#程序设计基础 第二章 数据类型.
第10章 GPS位置服务与地图编程.
Animation(動畫) 靜宜大學資工系 蔡奇偉 副教授
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
第五讲 从常用连续分布到二维变量分布 本次课讲授:第二章的 ; 下次课讲第三章的 ;
Chapter 5 Basic UI Design.
101年度經費結報說明 會計室 黃玉露.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
補間動畫 (Tween Animation) 靜宜大學資管系 楊子青
Interfaces and Packages
CustomView(自定義視圖) 、 畫布、顏色及多點觸控 靜宜大學資管系 楊子青
聚合型第一種:隱沒帶、島弧 例子:臺灣東方的琉球海溝、南美洲智利海溝. 聚合型第一種:隱沒帶、島弧 例子:臺灣東方的琉球海溝、南美洲智利海溝.
Review 1~3.
第五章 比率估计与回归估计 (ratio estimator and regression estimator)
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
第三章 消费者行为理论 2019/5/20.
第三章 正投影 3-2 正投影練習 3-2-1 前視圖 圖3-10 正投影三視圖.
網路商店裝修之二 CSS樣式編輯.
第5章 Div+CSS布局技术 经济管理学院.
Web前端开发技术与实践 第18章:绘图 阮晓龙 /
統計網路學習館 線性迴歸.
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Presentation transcript:

平面繪圖與動畫

一、Canvas繪圖 要在Android行動裝置繪製平面圖形,所使用的工具主要來自「android.graphics.*」套件。 Canvas:Canvas其實就是應用程式執行時顯示的畫面,有點類似一般繪圖用的畫布,是繪圖發生的地點。 Paint:是繪圖的執行工具,它能控制使用的顏色、透明度、畫刷大小、圖形填滿模式與樣式等;如果用以繪製文字,透過Paint類別也能設定文字的字型、字體與大小等。 Bitmap:實際畫出來的圖形,其實就是所繪出圖形像素的集合體。

繪製的基本形狀:組成繪製內容的基本圖素,如點、線段、矩形、橢圓形等。 繪圖主要是在View類別的「onDraw(Canvas)」方法內完成,因此要在Canvas上繪圖,應該先建立一個繼承自View的子類別,然後在此類別中的onDraw(Canvas)方法內完成繪圖。

二、基本形狀繪製 常用的繪製方法說明如下: 劃點:在指定位置劃點。劃一個點使用「drawPoint(float x, float y, Paint paint)」方法;劃多個點則使用「drawPoints(float[] float, int offset, int count, Paint paint)」方法。 畫一條線段:使用的方法為「drawLine(float startX, float startY, float stopX, float stopY, Paint paint)」。 畫多條線段:使用的方法為「drawLines(float[] pts, int offset, int count, Paint paint)」。

劃弧:使用的方法為「drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)」。 劃圓:使用的方法為「drawCircle(float cx, float cy, float radius, Paint paint)」。 劃橢圓:使用的方法為「drawOval(RectF oval, Paint paint)」。 劃矩形:使用的方法為「drawRect(float left, float top, float right, float bottom, Paint paint)」。 劃圓角矩形:使用的方法為「drawRoundRect(RectF rect, float rx, float ry, Paint paint)」

CanvasDraw Test範例 在Canvas上繪製一些不同顏色的幾何圖形。 在專案中增加一個View的延伸類別,命名為「DrawImage.java」。 在這自建類別中用Paint陣列設定了6組畫刷,分別用以繪製6種幾何圖形。 範例詳細內容請參考原書。

三、路徑與繪製文字 路徑是一條曲線,封閉或開放都可以,Canvas類別以drawPath(Path path, Paint paint)方法繪製路徑。 path:路徑的軌跡;對開放路徑是由不同線段組成,對封閉路徑則可以是一個形狀(如圓、矩形等)。 Paint:繪圖時使用的畫刷。 畫刷也提供「setPathEffect(PathEffect effect)」方法,可用以設定路徑的特殊效果,設定內容如下: CornerPathEffect:設定線段與線段之間的連接角為指定半徑的圓角,建構函式定義為CornerPathEffect (float radius)。

Canvas對文字提供3組方法,說明如下: DashPathEffect:設定構成路徑的線段是以破折號構成。 PathDashPathEffect:類似DashPathEffect,但破折號是以指定形狀建立。 ComposePathEffect:作用是先應用內部的效果(參數2),再用外部效果(參數1) 。 null:不設定任何特效。 Canvas對文字提供3組方法,說明如下: drawText():從指定位置劃出文字,執行此方法需提供要劃的文字、開始劃的位置以及畫刷等參數。

rawTextOnPath():沿指定的路徑劃出文字內容,執行此方法需提供要劃的文字、依循的路徑、指定從距離路徑起點水平位置開始劃、設定文字與路徑的垂直偏移量以及畫刷等參數,也可以指定只劃文字的部份內容。 drawPosText():這方法是以指定文字內容每一個字(中文字或英文字母)的位置,將文字顯示在Canvas上,執行時需要提供要劃的文字、含每個字(或英文字母)座標的陣列以及畫刷等參數,也可以指定只劃文字的部份內容。

DrawText Test範例 在Canvas上劃出4 組文字,第1組只設定文字大小與顏色;第2組除了文字大小與顏色外,還設定了文字傾斜效果;第3組使用第1組的畫刷,但設定文字沿指定路徑描繪;第4組也是使用第1組的畫刷,但指定了文字描繪時每一個字的座標位置。 範例詳細內容請參考原書。

四、點陣圖繪製 Canvas也能將現成的點陣圖影像檔繪到視圖中。 要繪製現成的點陣圖影像檔,最簡單的方法就是透過「Drawable」類別取得影像檔資源,然後用此類別的「draw()」方法將點陣圖劃在Canvas上。 在繪製之前,必須呼叫「setBound(Rect)」方法,以一個矩形區域告訴Drawable物件要繪製的位置與大小。

另一種作法是透過「Bitmap」與「BitmapFactory」類別,這種作法是先用「InputStream」物件取得要繪製點陣圖的資源,然後借助BitmapFactory類別的「decodeStream()」方法將存有點陣圖資源的輸入串流解碼為Bitmap物件,最後再用Canvas的「drawBitmap()」方法繪出點陣圖。 DrawBitmap Test範例 同時使用Drawable與Bitmap在Canvas上繪出g6.jpg與g5.jpg影像檔。 此檔案已事先存至專案「/res/drawable-xhdpi/」目錄。 範例詳細內容請參考原書。

五、2D影像處理 2D影像處理是指對Canvas上繪製的幾何圖形、文字或點陣圖(以下均稱為影像),變更它的性質(如透明度)、增加色彩渲染效果、或是改變它的幾何關係。 改變影像透明度 影像透明度可以透過畫刷的「setAlpha(int)」方法完成,設定的值從0(完全透明)到255(完全不透明) 。

為影像增加渲染效果 渲染主要是讓原影像和另一個圖樣(可以是顏色或其他影像)融合而產生的特殊效果。 Android提供的渲染方式有以下幾種: BitmapShader:用點陣圖作為渲染的圖樣。 public BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY) LinearGradient:渲染圖樣是沿一條指定線(以線2端的座標指定)變化的色彩 public LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)

RadialGradient:渲染圖樣是以指定中心為起點,輻射向外變化的顏色梯度 public RadialGradient(float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile) SweepGradient:渲染圖樣是以指定中心產生的掃描顏色梯度 public SweepGradient(float cx, float cy, int[] colors, float[] positions) ComposeShader:從指定的2個渲染器建立組合渲染器 public ComposeShader(Shader shaderA, Shader shaderB, Xfermode mode) 或 public ComposeShader (Shader shaderA, Shader shaderB, PorterDuff.Mode mode)

使用Matrix改變影像幾何關係 Android SDK提供Matrix類別,可以對影像進行變換處理,變換包括有:旋轉、縮放、傾斜、平移等,只要透過Matrix實體類別的方法設定想要的變換,再將此Matrix實體類別用Canvas的「setMatrix (Matrix matrix)」方法設定給自己,就能完成指定的變換。 旋轉(Rotate):「public void setRotate(float degrees)」或「public void setRotate(float degrees, float px, float py)」。 縮放(Scale):「public void setScale(float sx, float sy)」或「public void setScale(float sx, float sy, float px, float py)」,以(px, py)為縮放中心,X軸縮放率sx,Y軸縮放率sy。

傾斜(Skew):「public void setSkew(float kx, float ky)」或「public void setSkew(float kx, float ky, float px, float py)」,以(px, py)為傾斜中心,X軸傾斜率kx,Y軸傾斜率ky。 平移(Translate):「public void setTranslate(float dx, float dy)」,X軸移動距離dx,Y軸移動距離dy。

六、平面動畫 一般有3種建立平面動畫的方式: 影格動畫(Frame animation):這是傳統動畫產生的方式,藉由播放一系列影像及利用視覺暫留現象,使靜態影像產生動的感覺。 補間動畫(Tween animation):利用提供動畫目標開始及結束的屬性值與動畫時間,讓系統自行產生中間的過程,動畫的設定可以透過動畫XML定義檔設定,或是直接用程式控制。 動態繪圖:這方式是利用持續更新Canvas上繪出的圖形(幾何圖形、文字或點陣圖),達到動畫效果。

影格動畫 影格動畫可以透過「AnimationDrawable」類別實現,一般設定步驟如下: 將要用以產生動畫的影像檔加入專案「/res/drawable-xhdpi/」目錄。 設定活動佈局。 動畫使用的影像清單可以透過XML定義檔設定,此檔以<animation-list>標籤為清單設定開始位置,清單的每一個影像在<item> 內用「android:drawable」指定使用的影像檔,並用「android:duration」指定此張影像出現的時間長度。

在活動類別中建立AnimationDrawable與Resources物件,讓AnimationDrawable物件參考到動畫使用的影像清單XML定義檔,並將此AnimationDrawable物件設定給顯示媒介ImageView元件。 範例FrameAnimationXML Test 範例詳細內容請參考原書。 對於影格動畫,也可以不建立動畫影像清單定義檔,而直接用AnimationDrawable物件的「addFrame()」方法,將動畫影像一張張加入,這時候Resources物件getDrawable()方法的對象不再是動畫影像清單定義檔,而是各別的影像檔。

補間動畫 補間動畫依據要動態變化的屬性,各有對應的Animation物件,以程式設定的方式步驟如下: 設定活動佈局。 在活動程式碼實體化要動態變化屬性的動畫類別。 範例TweenAnimation Test詳細內容請參考原書。 補間動畫與影格動畫最大差別為,補間動畫變動的是顯示元件的屬性,而影格動畫是影像本身內容改變。

動態繪圖 動態繪圖產生的動畫其實就是不斷重新改變劃在Canvas上的圖形。繪圖是透過自建View子類別的onDraw(Canvas)方法將影像劃在Canvas上。 呼叫onDraw方法需要傳送Canvas物件給它,而Canvas物件是由系統親自管理,所以onDraw方法是由系統呼叫。 在自建的View子類別內要執行onDraw方法,只能透過「invalidate()」方法向系統提出執行onDraw方法的請求。

CanvasAnimation Test範例 範例詳細內容請參考原書。

七、手繪應用程式 HandDraw Test範例 目的是讓使用者用手在觸控螢幕上繪圖。 繪圖部份可以透過繪製路徑的方法(drawPath(Path path, Paint paint))完成,但路徑的座標就必須借重「MotionEvent」類別。 當觸控螢幕發生觸控相關事件,系統會傳送MotionEvent物件給被觸視圖的「onTouchEvent(MotionEvent event)」方法。這個方法利用MotionEvent物件的「getAction()」方法,可以知道發生的是什麼樣的觸控事件(壓下、拖曳或放開),用「getX()」與「getY()」方法則可以取得事件發生的位置。 範例詳細內容請參考原書。