1+x安卓應用開發(中級)課程-教案全套 項目1-7 Android基礎和環境搭建- 安卓底層原理認知_第1頁
1+x安卓應用開發(中級)課程-教案全套 項目1-7 Android基礎和環境搭建- 安卓底層原理認知_第2頁
1+x安卓應用開發(中級)課程-教案全套 項目1-7 Android基礎和環境搭建- 安卓底層原理認知_第3頁
1+x安卓應用開發(中級)課程-教案全套 項目1-7 Android基礎和環境搭建- 安卓底層原理認知_第4頁
1+x安卓應用開發(中級)課程-教案全套 項目1-7 Android基礎和環境搭建- 安卓底層原理認知_第5頁
已閱讀5頁,還剩118頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《騰訊1+x安卓應用開發(中級)》教案

一、教案設計課題項目1任務1Kotlin簡介及開發環境搭建課型理論課理論課時1課時實踐課時1課時教學目標知識目標能力(技能)目標1.能夠進行Kotlin安裝包的下載與安裝。2.能夠進行Kotlin環境的搭建與配置。教學重點Kotlin泛型、Kotlin的反射、Kotlin中的協程。教學難點Kotlin的反射。教學內容1.Kotlin簡介Kotlin是JetBrains公司在2010年推出的一種基于JVM的靜態類型編程語言。Kotlin可以編譯成Java字節碼,也可以編譯成JavaScript,以便在沒有JVM的設備上運行。2017年,Google宣布Kotlin是Android官方開發語言。2.Kotlin在安卓開發時的優勢使用Kotlin語言,對于安卓開發來說,主要有下面幾個優勢。減少空指針異常。減少代碼量:同樣的功能Kotlin開發要比Java少50%甚至更多。提升開發效率:增加了許多現代高級語言的語法特性,使得開發效率大大提升。實現與Java語言的無縫連接:Kotlin可以直接調用和使用Java編寫的代碼,也可以無縫使用Java第三方開源庫3.Kotlin插件的安裝在AndroidStudio中安裝Kotlin開發環境,需要先安裝Kotlin插件,安裝步驟如下:(1)單擊File|Setting,彈出setting面板,如圖1-1-1所示。圖1-1-1setting面板(2)單擊Plugins,輸入kotlin進行搜索,如圖1-1-2。圖1-1-2搜索kotlin(3)單擊Install后等待安裝完成即可。教學準備教材,PPT、教綱、教案參考資料/教學過程方法與手段教學備注【課堂導入】為什么需要安裝Kotlin插件?默認情況下,AndroidStudio安裝完成后,還不能使用Kotlin編寫代碼。要想使用Kotlin,必須安裝Kotlin插件。【教學實施】6.2.1任務描述在AndroidStudio中安裝Kotlin插件,搭建Kotlin開發環境,以便能在AndroidStudio中使用Kotlin編寫代碼。6.2.2問題引導為什么需要安裝Kotlin插件?默認情況下,AndroidStudio安裝完成后,還不能使用Kotlin編寫代碼。要想使用Kotlin,必須安裝Kotlin插件。6.1.3知識準備Kotlin是一種基于JVM的靜態類型編程語言。Kotlin是Android官方開發語言。使用Kotlin語言進行安卓開發的優勢。6.1.4在線安裝Kotlin插件6.1.5知識拓展下載安裝Kotlin插件離線安裝Kotlin插件【知識(技能)鞏固練習】完成Kotlin插件的安裝。【教學小結】講授、演示課后作業與訓練完成項目1課后練習對應的習題。教學反思

課題項目1任務2用Kotlin語言實現倒計時功能課型理論課理論課時2課時實踐課時2課時教學目標知識目標能力(技能)目標1.能夠掌握Kotlin基礎語法,能掌握Kotlin類型與表達式。2.能夠理解Kotlin泛型和注解。3.能夠掌握Kotlin的反射。4.能夠掌握Kotlin的協程。1.能夠利用常見集成開發環境創建工程項目,并能實現程序正確編譯和運行。2.能靈活使用Kotlin泛型、Kotlin的反射、Kotlin中的協程。教學重點Kotlin泛型、Kotlin的反射、Kotlin中的協程。教學難點Kotlin的反射。教學內容1.Kotlin基礎語法(1)注釋kotlin支持單行和多行注釋。(2)函數定義①函數定義使用關鍵字fun,函數參數格式為:參數:類型。返回值類型的定義是在函數頭后面加冒號:返回值類型。例如:funsum(a:Int,b:Int):Int{//Int參數,返回值Intreturna+b}②表達式可以作為函數體,函數返回值類型可以自動推斷,例如:funsum(x:Int,y:Int)=x+ypublicfunsum(x:Int,y:Int):Int=x+y③無返回值的函數(類似Java中的void),有兩種形式,一種是用Unit類型修飾,另外一種是直接省略不寫,例如:fundoSomething(){}fundoSomething():Unit{}(3)可變長參數函數函數的可變長參數可以用vararg關鍵字進行標識,例如:funvars(varargv:String){for(strinv){print(str+"")}}//測試funmain(args:Array<String>){vars("aaa","bbb","ccc")//輸出12345}程序運行后輸出:aaabbbccc(4)lambda(匿名函數)lambda就是將一小段代碼封裝成匿名函數,以參數值的方式傳遞到函數中,供函數使用,例如:funmain(args:Array<String>){valmin:(Int,Int)->Int={x,y->//只能返回Int類型,最后一句表達式的返回值必須為Int//if表達式返回Intif(x<y){x}else{y}}print(min(1,2))}程序運行后輸出:1上面的代碼在main函數中定義了一個求最小值的匿名函數min。(5)定義常量與變量在kotlin中,變量與常量在定義的時候可以不用賦初始值,但是在使用前一定要初始化。在kotlin中,變量的定義使用關鍵字var,格式為:var<標識符>:<類型>=<初始化值>例如:vara:Int=12在kotlin中,常量的定義使用關鍵字val,格式為:val<標識符>:<類型>=<初始化值>例如:vala:Int=12Kotlin的編譯器支持自動類型判斷,即聲明時可以不指定類型,由編譯器判斷。例如:vara=12(6)區間表達式區間表達式由具有操作符形式..的rangeTo函數輔以in和!in形成。區間是為任何可比較類型定義的,但對于整型原生類型,它有一個優化的實現。以下是使用區間的一些示例:for(iin1..4)print(i)//輸出“1234”for(iin4..1)print(i)//什么都不輸出if(iin1..10){//等同于1<=i&&i<=10println(i)}//使用step指定步長for(iin1..4step2)print(i)//輸出“13”for(iin4downTo1step2)print(i)//輸出“42”//使用until函數排除結束元素for(iin1until10){//iin[1,10)排除了10println(i)}2.Kotlin基本數據類型(1)基本數據類型Kotlin的基本數值類型包括Byte、Short、Int、Long、Float、Double等。(2)字符類型字符類型用Char描述,Kotlin中的Char不能直接和數字操作,Char必需是單引號'包含起來的。比如普通字符'0','a'。(3)布爾類型布爾用Boolean類型表示,它有兩個值:true和false。(4)字符串類型字符串類型用String描述,可以通過[]獲取某個字符,例如:vara:String="123"print(a[0])3.Kotlin泛型和注解泛型,即"參數化類型",將類型參數化,可以用在類,接口,方法上。(1)泛型類的基本使用泛型類指的就是在類定義的時候并不會設置類中的屬性或方法中的參數的具體類型,而在類使用時再進行屬性類型的定義。定義泛型類,就是在類名之后、主構造函數之前用尖括號括起的大寫字母代表某種數據類型。在定義泛型類型的變量時,可以完整地寫明類型參數,如果編譯器可以自動推定類型參數,也可以省略類型參數。例如:(2)泛型函數的基本使用在定義泛型函數時,泛型函數的類型參數要放在函數名的前面,例如:fun<E>test(num:E):E{returnnum;}funmain(args:Array<String>){print(test<Int>(1))print(test<String>("hello"))}(3)Kotlin中的注解①注解的基礎知識注解就是向代碼中添加元數據。通過在類名前添加annotation來聲明注解。Kotlin中有以下四種元注解(用來定義注解的注解):@Target:限定注解標記的目標(屬性、方法、類、擴展等等)@Retention:限定注解是否存儲到字節碼文件中;在運行時通過反射是否可見(默認情況下以上兩個條件均為真)@Repeatable:允許在同一個元素上重復使用同一個注解@MustBeDocumented:指定該注解是公有API的一部分,并且應該包含在生成的API文檔中顯示的類或方法的簽名中。在Kotlin中定義一個注解類,需要使用annotation關鍵字。例如:@Target(AnnotationTarget.CLASS,AnnotationTarget.PROPERTY)@Retention(AnnotationRetention.RUNTIME)annotationclassValue通過定義,@Value注解可以用來修飾類和屬性,并且這個注解在運行時可見,可以通過反射技術獲取@Value注解的相關信息。例如:下圖的例子中,@Value可以注解在類Stu和屬性name,age上面。②帶屬性的注解在kotlin中,可以為注解添加屬性。例如:上面的例子中,@Value具有屬性value,在給類進行注解時,需要傳遞參數給屬性,這些屬性值一般只有在程序運算時通過反射技術獲得得到才有意義。4.Kotlin的反射反射是指計算機程序在運行時(Runtime)可以訪問、檢測和修改它本身狀態或行為的一種能力。下面對Kotlin中的反射技術進行一個簡要介紹。(1)獲取KClasskotlin的KClass和java的Class可以看作同一個含義的類型。可以通過兩種方法獲取類的KClass:①類名().javaClass.kotlin②類名::class例如:程序運行后輸出:true在該例中通過兩種方法獲取Person的KClass。(2)通過反射創建對象在Kotlin中可以通過兩種方法創建對象,這兩種方法都需要對應的類提供無參構造函數。以上面的例子為例,創建Person對象:(3)通過反射獲取對象的成員、方法等要通過反射技術獲取對象的成員變量可以使用:KClass.declaredMemberProperties,獲取成員方法通過KClass.declaredFunctions。下面的例子將對這兩種操作進行演示:5、Kotlin中的協程協程(Coroutine)也叫微線程,也稱為輕量級Thread,是一種新的多任務并發的操作手段。它是運行在單線程中的并發程序。能大幅度提高并發性能。協程開發包在kotlinx.coroutines中,這個包可以build.gradle中通過dependencies引入。如:dependencies{implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2")}(1)協程的啟動協程的啟動有多種,下面將對GlobalScope.launch()和runBlocking()兩種方式進行介紹。1)方式一、GlobalScope.launchGlobalScope.launch創建的協程的生命周期受主應用程序的生命周期期限,如果主應用程序執行結束,由GlobalScope.launch創建的協程即使還沒執行完畢,也會直接退出。①通過GlobalScope.launch創建一個協程②協程首先通過delay(1000L)非阻塞等待1秒,再輸出World!信息。③在協程非阻塞等待的時候,主線程運行println("Hello,--->"+Thread.currentThread().name)④主線程Thread.sleep(2000),阻塞主線程2秒鐘,等待協程完成任務。程序運行后輸出:Hello,--->mainWorld!--->DefaultDispatcher-worker-1如果把Thread.sleep(2000)這行代碼去掉,則程序執行結果是:Hello,--->main因為主線程輸出hello信息以后就直接結束,而通過GlobalScope.launch創建的協程的生命周期和主線程一樣,所以也跟著主線程結束。GlobalScope.launch是創建協程最常用的方式。2)方式二、runBlockingrunBlocking函數和launch函數的不同點是會阻塞調用者線程直到協程完成。①通過GlobalScope.launch創建一個協程A,A協程將在1秒后輸出World信息。②主線程不受A協程的影響,繼續往下執行,輸出hello信息。③接著通過runBlocking創建了協程B,B協程中的代碼delay(5000L),會阻塞主線程5秒,④在此期間A協程休息1秒后輸出World,B協程在休息5秒以后繼續運行,主線程也解除阻塞輸出主線程運行結束。⑤runBlocking通常只用于啟動最外層的協程,保證其他的協程順利執行完任務。程序運行后輸出:Hello,World!主線程運行結束(2)協程的取消如果主線程已經執行完畢,協程還在運行,協程會直接結束運行,因為協程的生命周期和主線程一樣。如果要避免出現這種情況,可以在主線程的后面通過sleep函數阻塞主線程,等待協程結束。這并不是一種很好的方法,因為協程需要執行多少時間才結束,主線程并不知道,只能預估一個大于協程執行的時間用于阻塞。更好的方法是通過join()函數實現。GlobalScope.launch函數的返回值是Job類型,Job的join函數可以在主線程和協程之間實現同步。程序運行后輸出:helloWorld!--->DefaultDispatcher-worker-1end如果要取消協程的執行可以調用job.cancel();教學準備教材,PPT、教綱、教案參考資料/教學過程方法與手段教學備注【課堂導入】GPS定位應用非常廣泛,隨著航天科技的飛速發展,GPS定位系統可實現的功能也越來越多,本任務我們將解決如何利用騰訊位置服務提供的API實現GPS定位的問題。【教學實施】6.2.1任務描述使用Kotlin語言實現倒計時功能。點擊按鈕“開始倒計時”,開始30秒倒計時;點擊按鈕“暫停倒計時”,倒計時暫停;在暫停情況下再次點擊按鈕“開始倒計時”,從暫停時的秒數開始倒計時。6.2.2問題引導如果所有代碼都寫在主線程會引起在倒計時過程中無法點擊按鈕的問題,本任務我們將通過協程解決這個問題。6.2.3知識準備Kotlin基礎語法Kotlin基本數據類型Kotlin泛型和注解Kotlin的反射Kotlin中的協程。【知識(技能)鞏固練習】編寫程序實現協程的啟動和取消。【教學小結】講授、演示課后作業與訓練完成項目1課后練習對應的習題。教學反思《騰訊1+x安卓應用開發(中級)》教案

一、教案設計課題項目2任務1圖形的繪制課型理論課理論課時1課時實踐課時2課時教學目標知識目標能力(技能)目標掌握圖形繪制的常用類和方法能夠掌握安卓平臺下圖形的繪制。教學重點圖形的繪制方法。教學難點圖形繪制的常用類和方法的靈活使用教學內容Android界面中可以繪制各種圖形,其中主要涉及4個類,分別是View、Canvas、Paint和Color。1.View類在Android中繪制圖形需要在Canvas上進行,而使用Canvas需要使用View.onDraw()方法完成繪制工作,因此,需要定義一個android.view包中的View類的子類,然后復寫onDraw()方法。格式如下。classMyViewextendsView{@OverrideprotectedvoidonDraw(Canvascanvas){}}2.Canvas類Canvas類相當于畫布,定義在android.graphics包中,它給我們提供了一套畫圖API,常用的方法如下。(1)publicvoiddrawBitmap(Bitmapbitmap,floatleft,floattop,Paintpaint)表5-1drawBitmap方法參數介紹drawBitmap的作用:繪制位圖bitmap要繪制的位圖,此值不能為null。left正在繪制的位圖左側的位置。top正在繪制的位圖頂部的位置。paint用于繪制位圖的畫筆,此值可能是null。(2)publicvoiddrawCircle(floatcx,floatcy,floatradius,Paintpaint)表5-2drawCircle方法參數介紹drawCircle的作用:繪制圓形cx要繪制的圓的中心的x坐標。cy要繪制的圓的中心的y坐標。radius要繪制的圓的半徑。paint用來畫圓的畫筆,此值不能是null。(3)publicvoiddrawLine(floatstartX,floatstartY,floatstopX,floatstopY,Paintpaint)表5-3drawLine方法參數介紹drawLine的作用:繪制線條startX線條起點的x坐標。startY線條起點的y坐標。stopX線條終點的x坐標。stopY線條終點的y坐標。paint用于繪制線條的畫筆,此值不能是null。(4)publicvoiddrawOval(RectFoval,Paintpaint)表5-4drawOval方法參數介紹drawOval的作用:繪制橢圓。oval要繪制的橢圓形矩形邊界,這個值不能是null。paint畫筆,此值不能是null。(5)publicvoiddrawPath(Pathpath,Paintpaint)表5-5drawPath方法參數介紹drawPath的作用:繪制路徑path要繪制的路徑,此值不能是null。paint用于繪制路徑的畫筆,此值不能是null。(6)publicvoiddrawPoint(floatx,floaty,Paintpaint)表5-6drawPoint方法參數介紹drawPoint的作用:繪制點x要繪制的圓的x軸。y要繪制的圓的y軸。paint畫筆,此值不能是null。(7)publicvoiddrawText(Stringtext,floatx,floaty,Paintpaint)表5-7drawText方法參數介紹drawText的作用:繪制文本text擬繪制的文本,此值不能是null。x正在繪制的文本的x坐標y正在繪制的文本的y坐標paint畫筆,此值不能是null。3.Paint類Paint類相當于畫筆,定義在android.graphics包中,可以用來設置繪圖時的顏色、字體等,常用的方法如下。(1)publicvoidsetARGB(inta,intr,intg,intb)表5-8setARGB方法參數介紹setARGB的作用:設置顏色a畫筆的透明度,取值范圍0-255。r畫筆的紅色成分,取值范圍0-255。g畫筆的綠色成分,取值范圍0-255。b畫筆的藍色成分,取值范圍0-255。(2)publicvoidsetAlpha(inta)表5-9setAlpha方法參數介紹setAlpha的作用:設置透明的a畫筆的透明度,取值范圍0-255。(3)publicvoidsetAntiAlias(booleanaa)表5-10setAntiAlias方法參數介紹setAntiAlias的作用:設置抗鋸齒aa值為true時,消除鋸齒值為false時,保留鋸齒(4)publicvoidsetColor(intcolor)表5-11setColor方法參數介紹setColor的作用:設置顏色color畫筆的顏色,Android內部定義有Color類,包含了一些常見顏色定義。(5)publicvoidsetStyle(Paint.Stylestyle)表5-12setStyle方法參數介紹setStyle的作用:設置繪制風格stylePaint.Style.FILL:填充內部Paint.Style.FILL_AND_STROKE:填充內部和描邊Paint.Style.STROKE:僅描邊(6)publicvoidsetTextAlign(Paint.Alignalign)表5-13setTextAlign方法參數介紹setTextAlign的作用:設置文本對齊方式alignPaint.Align.LEFT:左對齊Paint.Align.CENTER:居中對齊Paint.Align.RIGHT:右對齊(7)publicvoidsetTextScaleX(floatscaleX)表5-14setTextScaleX方法參數介紹setTextScaleX的作用:設置文本水平方向縮放比例scaleX文本水平方向的繪制比例。默認值為1.0。值>1.0將放大。值<1.0將縮小。(8)publicvoidsetTextSize(floattextSize)表5-15setTextSize方法參數介紹setTextSize的作用:設置文本大小textSize文本大小,以像素為單位。此值必須為>0。(9)publicTypefacesetTypeface(Typefacetypeface)表5-16setTypeface方法參數介紹setTypeface的作用:設置文本樣式typefaceTypeface.BOLD為粗體,Typeface.BOLD_ITALIC為粗斜體,Typeface.ITALIC為斜體,Typeface.NORMAL為正常。(10)publicvoidsetUnderlineText(booleanunderlineText)表5-17setUnderlineText方法參數介紹setUnderlineText的作用:設置下劃線文字underlineText值為true時,設置下劃線。值為false時,取消下劃線。4.Color類Color類在android.graphics包中。定義了很多常量的顏色值,可以通過Color.***使用。典型的顏色值如下。publicstaticfinalintBLACK=-16777216;//黑色publicstaticfinalintBLUE=-16776961;//藍色publicstaticfinalintCYAN=-16711681;//青色publicstaticfinalintGRAY=-7829368;//灰色publicstaticfinalintGREEN=-16711936;//綠色publicstaticfinalintRED=-65536;//紅色publicstaticfinalintTRANSPARENT=0;//透明色publicstaticfinalintWHITE=-1;//白色publicstaticfinalintYELLOW=-256;//黃色Color類還定義了一些靜態方法,如下所示。publicstaticintalpha(intcolor))//透明度分量publicstaticintred(intcolor))//紅色分量publicstaticintgreen(intcolor))//綠色分量publicstaticintblue(intcolor)//藍色分量publicstaticintrgb(intred,intgreen,intblue)//由紅綠藍三原色組成的顏色值publicstaticintargb(intalpha,intred,intgreen,intblue)//由透明度和紅綠藍三原色組成的顏色值教學準備教材,PPT、教綱、教案參考資料/教學過程方法與手段教學備注【課堂導入】常見的二維圖形在Android中是如何繪制的呢?AndroidAPI提供一系列進行2D繪圖的方法,這些方法放置在android.graphics包下,graphics中包括了Canvas、Paint、Color、Bitmap等類,具有繪制點、線、顏色、2D幾何圖形、圖像處理等功能。【教學實施】5.1.1任務描述利用Canvas、Paint和Color等類繪制如圖所示的指南針表盤。5.1.2問題引導常見的二維圖形在Android中是如何繪制的呢?AndroidAPI提供一系列進行2D繪圖的方法,這些方法放置在android.graphics包下,graphics中包括了Canvas、Paint、Color、Bitmap等類,具有繪制點、線、顏色、2D幾何圖形、圖像處理等功能。5.1.3知識準備View類的作用Canvas類的常用方法Paint類的常用方法Color類定義的常量顏色值和靜態方法5.1.4完成指南針表盤的繪制5.1.5知識拓展利用Canvas類提供的不同方法繪制出不同的圖形利用Bitmap、BitmapFactory和Matrix對圖形圖像進行處理【知識(技能)鞏固練習】分別繪制出矩形、圓形和三角形。【教學小結】講授、演示課后作業與訓練完成項目2課后練習對應的習題。教學反思

課題項目2任務2屬性動畫的實現課型理論課理論課時2課時實踐課時2課時教學目標知識目標能力(技能)目標理解屬性動畫的實現原理能夠掌握安卓平臺下屬性動畫的實現。教學重點屬性動畫的實現方法。教學難點屬性動畫的實現原理教學內容屬性動畫的實現機制是通過對目標對象進行賦值并修改其屬性來實現的。例如修改目標對象的alpha屬性值,可以實現透明度的變化;修改目標對象的rotation屬性值可以實現旋轉角度的變化。ValueAnimator是整個屬性動畫機制中最核心的一個類,負責計算初始值和結束值之間的動畫過渡,我們只需要將初始值和結束值提供給ValueAnimator,并告訴它動畫運行的時長,ValueAnimator就會幫我們完成從初始值過渡到結束值的效果。此外,ValueAnimator還負責管理動畫的播放次數、播放模式、以及對動畫設置監聽器等。例如,通過下面的代碼可以實現將一個值從0平滑過渡到1,重復播放3次,每次播放時長是300毫秒。ValueAnimatoranim=ValueAnimator.ofFloat(0f,1f);anim.setDuration(300);//播放時長anim.setRepeatCount(3);//播放次數anim.setRepeatMode(ValueAnimator.REVERSE);//播放模式:反向播放anim.start();//開始播放ObjectAnimator是ValueAnimator的一個子類,也是我們最常接觸到的類。ValueAnimator只是對值進行了一個平滑的過渡,而ObjectAnimator則可以直接對任意對象的任意屬性進行動畫操作。通過調用ofFloat()方法來去創建一個ObjectAnimator的實例,該方法的第一個參數用來指定動畫作用的目標對象,第二個參數用來指定需要變化的是哪個屬性,第三個參數是長度可變的float數據,用來指定動畫變化過程中屬性的值。publicstaticObjectAnimatorofFloat(Objecttarget,StringpropertyName,float...values)下面分別對透明度、旋轉、縮放、平移四種屬性動畫進行講解。1.透明度動畫透明度動畫主要通過指定目標對象的透明度在動畫過程中的值,以及動畫持續的時間來實現的。代碼如下:ObjectAnimatoralpha=ObjectAnimator.ofFloat(imageView,"alpha",0f,1f);alpha.setRepeatCount(2);alpha.setRepeatMode(ObjectAnimator.REVERSE);alpha.setDuration(1000);alpha.start();上述代碼定義了一個透明度動畫,效果是,使imageView從完全透明變換到完全不透明,動畫時間是1秒,并且該動畫可以反向重復2次。表5-21透明度動畫ofFloat()方法的參數透明度動畫ofFloat()方法的參數imageView動畫作用在imageView上alpha對imageView的alpha屬性進行動畫操作0f,1falpha屬性的值從0變化到1。0表示完全都沒,1表示完全不透明。此處也可以根據動畫需要設置兩個以上的值。setRepeatCount(2):設置動畫重復次數為2次,如果設為-1,則表示重復無限次。setRepeatMode(ObjectAnimator.REVERSE):設置動畫重復的方式是反向重復,如果設為ObjectAnimator.RESTART,則表示正向重復。setDuration(1000):設置動畫播放時長為1000毫秒。start():開始播放動畫。上述方法setRepeatCount()、setRepeatMode()、setDuration()、start()在其他屬性動畫中也可以使用,下面不再單獨介紹。2.旋轉動畫旋轉動畫主要通過指定目標對象的旋轉角度在動畫過程中的值,以及動畫持續的時間來實現的。代碼如下:ObjectAnimatorrotation=ObjectAnimator.ofFloat(imageView,"rotation",0f,180f,0f);rotation.setRepeatCount(2);rotation.setRepeatMode(ObjectAnimator.RESTART);rotation.setDuration(1000);imageView.setPivotX(0);//指定旋轉中心點的X坐標imageView.setPivotY(0);//指定旋轉中心點的Y坐標rotation.start();上述代碼定義了一個旋轉動畫,效果是,使imageView從0度旋轉到180度,再旋轉到0度,動畫時間是1秒,并且該動畫可以正向重復2次。表5-22旋轉動畫ofFloat()方法的參數旋轉動畫ofFloat()方法的參數imageView動畫作用在imageView上rotation對imageView的rotation屬性進行動畫操作0f,180f,0frotation屬性的值從0變化到180,再變化到0。0/180/90在這里指的是旋轉的角度值。此處值的個數可以根據動畫需要自行設置。默認情況下,旋轉動畫的中心點在目標對象的中心位置,如果想修改中心點,可以通過imageView.setPivotX()和imageView.setPivotY()指定旋轉中心點的X坐標和Y坐標。上述代碼中的imageView.setPivotX(0)和imageView.setPivotY(0),表示將imageView的左上角設置旋轉中心點。3.縮放動畫縮放動畫主要通過指定目標對象的scaleX和scaleY兩個屬性在動畫過程中的值,以及動畫持續的時間來實現的。代碼如下:AnimatorSetscale=newAnimatorSet();ObjectAnimatorscaleX=ObjectAnimator.ofFloat(imageView,"scaleX",1f,0.5f,1f);ObjectAnimatorscaleY=ObjectAnimator.ofFloat(imageView,"scaleY",1f,0.5f,1f);scale.setDuration(1000);scale.play(scaleX).with(scaleY);scale.start();上述代碼定義了一個縮放動畫,效果是,使imageView水平方向和垂直方向的尺寸同時從原來的大小縮小一半,再同時放大到原來的大小,動畫時間是1秒。由于在這里需要對兩個屬性的值操作,所以要用到動畫集合類AnimatorSet。scale.play(scaleX).with(scaleY);表示同時執行scaleX和scaleY動畫。如果想先執行scaleX,再執行scaleY,則使用代碼scale.play(scaleY).after(scaleX);表5-23縮放動畫ofFloat()方法的參數縮放動畫ofFloat()方法的參數imageView動畫作用在imageView上scaleX對imageView的scaleX屬性進行動畫操作1f,0.5f,1fscaleX屬性的值從1變化到0.5,再變化到1。1/0.5/1在這里指的是目標對象原來尺寸的倍數。此處值的個數可以根據動畫需要自行設置。4.平移動畫平移動畫主要通過指定目標對象的translationX和translationY兩個屬性在動畫過程中的值,以及動畫持續的時間來實現的。代碼如下:AnimatorSettranslate=newAnimatorSet();ObjectAnimatortranslationX=ObjectAnimator.ofFloat(imageView,"translationX",0f,100f,0f);ObjectAnimatortranslationY=ObjectAnimator.ofFloat(imageView,"translationY",0f,100f,0f);translate.setDuration(1000);translate.play(translationY).after(translationX);translate.start();上述代碼定義了一個平移動畫,效果是,使imageView先向右移動100px,再向左平移回到原來的位置,然后向下移動100px,再向上平移回到原來的位置,動畫時間是1秒。由于在這里需要對兩個屬性的值進行操作,所以也用到了動畫集合類AnimatorSet。表5-24平移動畫ofFloat()方法的參數平移動畫ofFloat()方法的參數imageView動畫作用在imageView上translationX對imageView的translationX屬性進行動畫操作0f,100f,0ftranslationX屬性的值從0變化到100,再變化到0。此處值的個數可以根據動畫需要自行設置。教學準備教材,PPT、教綱、教案參考資料/教學過程方法與手段教學備注【課堂導入】屬性動畫是如何實現動畫效果的呢?屬性動畫是通過對目標對象的進行賦值并修改其屬性來實現的。例如修改目標對象的Alpha屬性值,可以實現透明度的變化;修改目標對象的BackgroundColor屬性值可以實現背景色的變化。【教學實施】5.2.1任務描述點擊不同的按鈕能實現4種不同的屬性動畫效果:透明度動畫、旋轉動畫、縮放動畫和平移動畫。如圖所示。5.2.2問題引導屬性動畫是如何實現動畫效果的呢?屬性動畫是通過對目標對象的進行賦值并修改其屬性來實現的。例如修改目標對象的Alpha屬性值,可以實現透明度的變化;修改目標對象的BackgroundColor屬性值可以實現背景色的變化。5.2.3知識準備屬性動畫簡介透明度動畫的實現旋轉動畫的實現縮放動畫的實現平移動畫的實現5.2.4實現蘋果的透明度、旋轉、縮放和平移動畫。5.2.5知識拓展多個動畫的執行順序問題插值器的使用【知識(技能)鞏固練習】實現時鐘的秒針轉動的動畫。【教學小結】講授、演示課后作業與訓練完成項目2課后練習對應的習題。教學反思

課題項目2任務3逐幀動畫的實現課型理論課理論課時1課時實踐課時2課時教學目標知識目標能力(技能)目標理解逐幀動畫的實現原理能夠掌握安卓平臺下逐幀動畫的實現。教學重點逐幀動畫的實現方法。教學難點逐幀動畫的實現原理教學內容1.指定圖像的播放順序在drawable文件夾下創建xml文件,在該xml文件中指定圖像的播放順序和播放時長。要求該xml文件的跟節點是animation-list。每個item子節點表示一幀。代碼示例如下:<?xmlversion="1.0"encoding="utf-8"?><animation-listxmlns:android="/apk/res/android"><itemandroid:drawable="@drawable/img1"android:duration="100"/><itemandroid:drawable="@drawable/img2"android:duration="100"/></animation-list>以上代碼片段表示,先顯示img1圖像100毫秒,然后顯示img2圖像100毫秒。drawable屬性用來指定圖像資源,duration用來指定顯示此幀的時間(以毫秒為單位)。更多XML屬性見表5-26。表5-26XML屬性屬性名作用android:drawable用來指定drawable資源android:duration指定顯示此幀的時間(以毫秒為單位)android:oneshot默認為false,當設置為true時,動畫將只運行一次,然后停止。android:variablePadding默認為false,當設置為true時,則drawable的padding值隨當前選擇的狀態而改變。android:visible用于設置drawable的可見性,默認為false。2.AnimationDrawable類 該類用于創建逐幀動畫的對象。通過View對象的getBackground()方法,可以獲得一個AnimationDrawable對象。然后調用AnimationDrawable的start()方法即可啟動動畫,調用stop()方法可以在當前幀中停止動畫。其他常用方法的說明見表5-27。表5-27AnimationDrawable類的常見方法方法返回值類型方法名及作用voidaddFrame(Drawableframe,intduration)作用:將幀添加到動畫中。booleanisRunning()作用:指示動畫當前是否正在運行。voidsetOneShot(booleanoneShot)作用:設置動畫是應該播放一次還是重復播放。參數設為true表示只播放一次。voidstart()從第一幀開始播放動畫。voidstop()在當前幀中停止動畫。教學準備教材,PPT、教綱、教案參考資料/教學過程方法與手段教學備注【課堂導入】什么是逐幀動畫?逐幀動畫指的是逐幀繪制幀內容的動畫,其實現原理是把事先準備好的若干幅靜態圖像按照指定的順序進行播放,利用人眼的“視覺暫留”性質,使用戶產生動畫的錯覺。每幅圖像稱為一幀。【教學實施】5.3.1任務描述點擊“播放”按鈕后,能將4幅小狗的圖像按照指定的順序進行播放,形成小狗原地起跳的動畫,同時“播放”二字變成“暫停”,點擊“暫停”按鈕后,動畫暫停播放。如圖所示。5.3.2問題引導什么是逐幀動畫?逐幀動畫指的是逐幀繪制幀內容的動畫,其實現原理是把事先準備好的若干幅靜態圖像按照指定的順序進行播放,利用人眼的“視覺暫留”性質,使用戶產生動畫的錯覺。每幅圖像稱為一幀。5.3.3知識準備指定圖像的播放順序AnimationDrawable類的常用方法5.3.4實現小狗原地起跳的動畫。5.3.5知識拓展介紹通過java代碼定義逐幀動畫的方法【知識(技能)鞏固練習】利用逐幀動畫制作一個進程加載動畫。【教學小結】講授、演示課后作業與訓練完成項目2課后練習對應的習題。教學反思

課題項目2任務4音頻的播放課型理論課理論課時2課時實踐課時2課時教學目標知識目標能力(技能)目標掌握音頻播放的常用類和方法。能夠控制安卓平臺下音頻的播放。教學重點掌握播放音頻的方法。教學難點音頻播放的常用類和方法的靈活使用。教學內容1.MediaPlayer類的常用方法在Android中播放音頻文件一般是通過MediaPlayer類實現的,該類對多種格式的音頻文件提供了非常全面的控制方法,其常用方法見表5-28。表5-28MediaPlayer類的常用方法方法返回值類型方法名及作用voidsetDataSource()作用:設置播放的音頻文件。voidPrepare()作用:準備音頻文件以便播放。voidprepareAsync()作用:以異步的方式準備音頻文件以便播放。voidstart()作用:開始播放或者繼續播放音頻。voidpause()作用:暫停播放音頻。voidseekTo()作用:把播放頭移動到指定的時間位置voidstop()作用:停止播放音頻。voidrelease()作用:釋放與MediaPlayer對象相關的資源。booleanisPlaying作用:判斷音頻是否正確播放。intgetCurrentPosition()作用:獲取當前播放位置。intgetDuration()作用:獲取音頻文件的時長2.MediaPlayer的狀態圖MediaPlayer具有內部狀態,某些操作僅在播放器處于特定狀態時才有效。如果您在錯誤的狀態下執行某項操作,則系統可能會拋出異常。圖5-5是官方文檔給出的MediaPlayer狀態圖。圖5-5MediaPlayer狀態圖該圖說明了哪些方法可將MediaPlayer從一種狀態變為另一種狀態。例如,當您創建新的MediaPlayer時,它處于“Idle”狀態。此時,您應該通過調用setDataSource()初始化該類,使其處于“Initialized”狀態。然后,您必須使用prepare()或prepareAsync()方法完成準備工作。當MediaPlayer準備就緒后,它便會進入“Prepared”狀態,這也意味著您可以通過調用start()使其播放媒體內容。此時,如圖5-5所示,您可以通過調用start()、pause()和seekTo()等方法在“Started”、“Paused”和“PlaybackCompleted”狀態之間切換。不過請注意,當您調用stop()時,除非您再次準備MediaPlayer,否則將無法再次調用start()。3.MediaPlayer的三種數據源MediaPlayer可以播放raw文件夾下的音頻文件,也可以播放sd卡中的音頻文件,還可以播放網絡音頻文件。示例代碼如下://設置raw文件夾下的音頻文件為數據源mediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.xxx);//設置sd卡中的音頻文件為數據源mediaPlayer.setDataSource("sd卡中音頻文件的路徑");//設置網絡音頻文件為數據源mediaPlayer.setDataSource("http://..../xxx.mp3");需要注意的是,如果您使用MediaPlayer播放基于網絡的內容,則您的應用必須申請網絡訪問權限。<uses-permissionandroid:name="android.permission.INTERNET"/>4.播放音頻文件在設置完數據源后,播放音頻文件前,需要調用prepare()或者prepareAync()對音頻文件進行解析。prepare()是同步操作,用于解析小文件,prepareAync()是異步操作,用于解析大文件,以便造成UI線程阻塞。示例代碼如下:(1)小音頻文件mediaPlayer.prepare();mediaPlayer.start();//開始播放(2)大音頻文件mediaPlayer.prepareAsync();mediaPlayer.setOnPreparedListener(newMediaPlayer.OnPreparedListener(){@OverridepublicvoidonPrepared(MediaPlayermp){mp.start();//開始播放}});需要注意的是,使用create()方法創建MediaPlayer對象并設置數據源時,不需要調用prepare()方法,直接調用start()播放音頻文件即可。教學準備教材,PPT、教綱、教案參考資料/教學過程方法與手段教學備注【課堂導入】音頻的播放是Android開發中較為常用的功能,Android是如何實現對音頻播放的支持的呢?Android提供的對音頻進行處理的API包是android.media,media中包括了AudioManager、MediaPlayer等類,具有設置音頻類型,以及控制音頻的播放、暫停、停止等功能。【教學實施】5.4.1任務描述本任務需要實現的功能是:通過Switch開關按鈕控制背景音樂的播放。當按鈕處于打開狀態時,能播放音樂,并顯示文字“音樂播放中”,當按鈕處于關閉狀態時,能暫停音樂的播放,并顯示文字“音樂暫停播放”,當Activity被銷毀時,停止音樂的播放,并釋放播放器占用的資源。如圖所示。5.4.2問題引導音頻的播放是Android開發中較為常用的功能,Android是如何實現對音頻播放的支持的呢?Android提供的對音頻進行處理的API包是android.media,media中包括了AudioManager、MediaPlayer等類,具有設置音頻類型,以及控制音頻的播放、暫停、停止等功能。5.4.3知識準備MediaPlayer類的常用方法MediaPlayer的狀態圖MediaPlayer的三種數據源播放音頻文件5.4.4通過Switch開關按鈕控制背景音樂的播放。5.4.5知識拓展SoundPool類的常用方法使用SoundPool播放音頻的過程加載音頻文件播放音頻【知識(技能)鞏固練習】制作一個音頻播放器,能實現暫停和播放功能。【教學小結】講授、演示課后作業與訓練完成項目2課后練習對應的習題。教學反思

課題項目2任務5視頻的播放課型理論課理論課時1課時實踐課時2課時教學目標知識目標能力(技能)目標掌握視頻播放的常用類和方法。能夠控制安卓平臺下視頻的播放。教學重點掌握播放視頻的方法。教學難點視頻播放的常用類和方法的靈活使用。教學內容1.SurfaceView簡介SurfaceView把視頻解析成的一幀一幀的圖像,并把這些圖像顯示出來。如果把這些工作放在一個線程中完成,會導致畫面不流暢或者視頻不同步的情況發生。SurfaceView通過雙緩沖機制解決這個問題,即通過兩個線程循環交替地解析某一幀圖像和顯示圖像,前端緩沖區是正在渲染的圖形緩沖區,而后端緩沖區是接下來要渲染的圖形緩沖區。當我們要播放某一幀時,它已經提前幫我們加載好后面一幀了,所以播放起視頻很流暢。2.Surface簡介Surface是由屏幕顯示內容合成器(screencompositor)所管理的原生緩沖器的句柄。即通過Surface可以獲得原生緩沖器以及其中的內容。原生緩沖器(rawbuffer)是用來保存當前窗口的像素數據的。Surface中的Canvas成員能用于畫圖形或圖像。Surface用通過SurfaceView展示其中的內容。3.SurfaceHolder簡介SurfaceHolder是一個接口,用于維護和管理SurfaceView背后的Surface。SurfaceHolder通過三個回調方法,讓我們可以監聽到Surface的創建、銷毀或者改變。在SurfaceView中有一個方法getHolder(),可以很方便地獲得SurfaceView背后的Surface所對應的SurfaceHolder。//監聽Surface在創建、銷毀、改變時的狀態surfaceView.getHolder().addCallback(newSurfaceHolder.Callback(){//當Surface創建時調用@OverridepublicvoidsurfaceCreated(SurfaceHoldersurfaceHolder){}//當surface發生結構性變化時(格式或者大小)@OverridepublicvoidsurfaceChanged(SurfaceHoldersurfaceHolder,inti,inti1,inti2){}//當Surface銷毀時調用@OverridepublicvoidsurfaceDestroyed(SurfaceHoldersurfaceHolder){}});教學準備教材,PPT、教綱、教案參考資料/教學過程方法與手段教學備注【課堂導入】Android是如何實現對視頻播放的支持的呢?與音頻播放相比,視頻的播放需要將影像展示出來。在Android系統中,MediaPlayer不僅可以播放音頻,還可以與SurfaceView相配合播放視頻,SurfaceView主要負責顯示MediaPlayer中解析得到的視頻圖像。【教學實施】5.5.1任務描述本任務需要實現的功能是:通過MediaPlayer和SurfaceView實現視頻的播放。左邊的按鈕實現繼續播放和暫停播放功能的切換,右邊的按鈕實現重播的功能。當Activity最小化后再重新顯示時,視頻能從最小化前的位置開始播放。當Activity被銷毀時,停止視頻的播放,并釋放播放器占用的資源。界面效果如圖所示。5.5.2問題引導Android是如何實現對視頻播放的支持的呢?與音頻播放相比,視頻的播放需要將影像展示出來。在Android系統中,MediaPlayer不僅可以播放音頻,還可以與SurfaceView相配合播放視頻,SurfaceView主要負責顯示MediaPlayer中解析得到的視頻圖像。5.5.3知識準備SurfaceView簡介Surface簡介SurfaceHolder簡介5.5.4實現視頻的播放、暫停播放、繼續播放和重播。5.5.5知識拓展介紹在Android系統中使用VideoView控件播放視頻的方法。【知識(技能)鞏固練習】使用同一個按鈕實現視頻的播放和暫停。【教學小結】講授、演示課后作業與訓練完成項目2課后練習對應的習題。教學反思課題項目2任務6相機和相冊的使用課型理論課理論課時1課時實踐課時1課時教學目標知識目標能力(技能)目標掌握使用系統內置Activity實現拍照和讀取相冊的方法。能夠控制安卓系統相機和相冊。教學重點掌握控制安卓系統相機和相冊的方法。教學難點調用系統內置拍照出錯解決方法。教學內容1.在AndroidManifest.xml文件的manifest節點中聲明使用相機的權限和外部存儲設備的存取權限。<uses-permissionandroid:name="android.permission.CAMERA"/><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>2.動態申請權限拍照需要申請使用相機的權限"android.permission.CAMERA",存取圖片需要申請讀外部存儲設備的權限“android.permission.READ_EXTERNAL_STORAGE”和寫外部存儲設備的權限“android.permission.WRITE_EXTERNAL_STORAGE”。首先在AndroidManifest.xml文件中的manifest節點聲明權限,代碼如下:<uses-permissionandroid:name="android.permission.CAMERA"/><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>在Android6.0以后開始,對于部分敏感的“危險”權限,需要在應用運行時向用戶申請,只有用戶允許的情況下這個權限才會被授予給應用。因此,接下來還需要在代碼中動態申請權限。分為兩個步驟,一是使用ContextCompat的checkSelfPermission()檢測相關權限是否被用戶許可了,如果沒有許可,則調用ActivityCompat的requestPermissions()請求用戶授權;二是通過對onRequestPermissionsResult()方法的回調判斷用戶是否同意授權,如果結果是PackageManager.PERMISSION_GRANTED則表示用戶同意授權,如果結果是PackageManager.PERMISSION_DENIED則表示用戶不同意授權。示例代碼如下://檢測相機權限if(ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!=PackageManager.PERMISSION_GRANTED){//如果未授權時,則請求用戶授權ActivityCompat.requestPermissions(MainActivity.this,newString[]{Manifest.permission.CAMERA},PERMISSIONS_REQUEST);}else{//如果已經授權,在此處編寫相應的功能代碼}//用戶對授權請求做出反饋后,回調該方法@OverridepublicvoidonRequestPermissionsResult(intrequestCode,Stringpermissions[],int[]grantResults){switch(requestCode){casePERMISSIONS_REQUEST:if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){//如果用戶同意授權了,在此處編寫相應的功能代碼}else{//如果用戶不同意授權,則在此處編寫相應的功能代碼}}}3.使用攝像頭拍照調用系統拍照程序可以非常方便地實現使用攝像頭拍照的功能。具體做法是,創建一個動作為MediaStore.ACTION_IMAGE_CAPTURE的Intent對象,調用Intent的putExtra()方法指定照片輸出路徑,執行startActivityForResult()方法啟動系統自帶的拍照程序,即可使用攝像頭進行拍照。代碼如下:IntentintentCapture=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);intentCapture.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(picFile));//1startActivityForResult(intentCapture,REQUEST_CAMERA);需要注意的是,以上代碼的注釋1處的含義是,將用于保存照片的文件picFile的URI通過Intent對象傳遞給系統的拍照程序,這就意味著將文件URI暴露給了另一個Activity,如果不做處理,程序運行時將會報出如下錯誤:android.os.FileUriExposedException:file:///storage/emulated/0/Pictures/***.jpgexposedbeyondappthroughClipData.Item.getUri()解決該錯誤的辦法是,在onCreate()方法中,調用StrictMode.VmPolicy.Builder的detectFileUriExposure()方法檢測文件URI暴露信息。代碼如下:StrictMode.VmPolicy.Builderbuilder=newStrictMode.VmPolicy.Builder();StrictMode.setVmPolicy(builder.build());builder.detectFileUriExposure();拍照后,在onActivityResult()中處理照片的uri,將照片顯示到ImageView中,并發送廣播通知圖庫更新。ivAvatar.setImageURI(Uri.fromFile(picFile));//發送廣播,通知圖庫更新Intentintent=newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);Uriuri=Uri.fromFile(picFile);intent.setData(uri);sendBroadcast(intent);4.讀取相冊的圖片使用Android內置的Activity可以方便地實現選取相冊圖片的功能。具體做法是,創建一個動作為Intent.ACTION_PICK的Intent對象,指定uri為MediaStore.Images.Media.EXTERNAL_CONTENT_URI,執行startActivityForResult()方法打開系統相冊界面。代碼如下:IntentintentAlbum=newIntent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);intentAlbum.setType("image/*");//打開相冊選擇界面startActivityForResult(intentAlbum,REQUEST_ALBUM);然后在onActivityResult()中處理返回的圖片uri,將圖片顯示到ImageView中即可。@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,@NullableIntentdata){super.onActivityResult(requestCode,resultCode,data);if(resultCode==RESULT_OK){if(requestCode==REQUEST_CAMERA){//如果是“拍照”…}elseif(requestCode==REQUEST_ALBUM){//如果是“從相冊中選擇”UridataUri=data.getData();ContentResolvercontentResolver=getContentResolver();try{Bitmapbitmap=BitmapFactory.decodeStream(contentResolver.openInputStream(dataUri));ivAvatar.setImageBitmap(bitmap);}catch(FileNotFoundExceptione){e.printStackTrace();}}}}教學準備教材,PPT、教綱、教案參考資料/教學過程方法與手段教學備注【課堂導入】在常用的App中(例如QQ、微信、微博等),經常需要分享圖片,此時就需要用到拍照和從相冊中讀取圖片的功能。在Android中如何實現這兩個功能呢?本任務通過啟動系統自帶的拍照程序和使用Android內置的Activity來實現這些功能。【教學實施】5.6.1任務描述本任務將實現拍照和從相冊中選擇圖像的功能。如左圖所示,點擊右側頭像,能打開菜單,如右圖所示。當用戶選擇“拍照”菜單項時,能打開系統拍照程序進行拍照,拍出的照片顯示在右側ImageView中。當用戶選擇“從相冊中選擇”菜單項時,能打開相冊,供用戶選擇一張圖片作為頭像。5.6.2問題引導在常用的App中(例如QQ、微信、微博等),經常需要分享圖片,此時就需要用到拍照和從相冊中讀取圖片的功能。在Android中如何實現這兩個功能呢?本任務通過啟動系統自帶的拍照程序和使用Android內置的Activity來實現這些功能。5.6.3知識準備聲明使用相機的權限和外部存儲設備的存取權限動態申請權限使用攝像頭拍照讀取相冊的圖片5.6.4實現拍照和從相冊中選擇圖像的功能。5.6.5知識拓展介紹另一種android.os.FileUriExposedException報錯問題的解決的方法。【知識(技能)鞏固練習】設計一個簡易的照相機。【教學小結】講授、演示課后作業與訓練完成項目2課后練習對應的習題。教學反思《騰訊1+x安卓應用開發(中級)》教案

一、教案設計課題項目3任務1顯示基礎地圖課型理論課理論課時1課時實踐課時2課時教學目標知識目標能力(技能)目標1.熟悉騰訊位置服務地圖key的獲取和配置方法2.熟悉在項目中集成SDK的方法。3.熟悉顯示地圖需要哪些權限。能利用騰訊提供的位置服務在界面上顯示基礎地圖。教學重點掌握顯示基礎地圖的方法。教學難點圖形繪制的常用類和方法的靈活使用教學內容想要使用騰訊位置服務地圖SDK,必須先申請一個開發者賬號,申請地址:/dev/console/home。然后前往/console/key.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論