當前位置:首頁 » 安卓系統 » vectorandroid

vectorandroid

發布時間: 2022-08-11 15:40:27

❶ android 類圖 intent 是什麼關系

先看下java中對Vector的描述:(對Vector熟悉的下面這段可不看)

Vector 類可以實現可增長的對象數組。與數組一樣,它包含可以使用整數索引進行訪問的組件。但是,Vector的大小可以根據需要增大或縮小,以適應創建 Vector 後進行添加或移除項的操作。
從 Java 2 平台 v1.2 開始,此類改進為可以實現 List 介面,使它成為 Java Collections Framework 的成員。與新 collection 實現不同,Vector 是同步的。
之前看think in java 中也有提到,Vector與List相比,主要的區別就在於,Vector是同步的,List是非同步的,Vector在迭代的時候是不能對隊里的數據進行增刪操作的,否則會拋出異常,同理,在單一線程條件下,Vector的效率較之ArrayList等會更低,因此在Android平台下可能也不太會使用到該類。

下面就是重點了,先看下Vector的類圖:

可以看到Vector是實現了Serializable介面的,所以很顯然,Intent是可以傳遞這樣的數據的,但是在實踐中還是發現問題了,當我在Activity A中將Vector數據put進入intent的bundle中時,在Activity B中去取出數據(getSerializable)時,將其強轉為Vector,程序會報錯,cant Cast ArrayList to Vector(不能將Arraylist轉換為Vector類型),見鬼了,後來去搜了下,stackflow上也有哥們問到這樣的問題,有人猜測是所有Collection數據在進入Intent後,都被Android強轉為Arraylist了,這里我還沒有查詢Android源碼,但根據表現出來的問題也基本是這樣的,哪位大神可以看下源碼。
所以,結論就是,盡量不要在Android中使用Vector,如果確實因為線程同步的問題必須使用,那當你看到那個類轉換異常時也不要驚訝,老老實實把它先用Arraylist盛放起來,再轉回到Vector,或者程序的參數或者返回值介面不要寫死為Vector,使用List這種泛型,這樣也比較有利於程序的擴展。

安卓系統下是否有合適的矢量繪圖平台,類似於台式電腦下的AutoCAD或VectorDrow之類 的

暫時沒有,而且手機的屏幕尺寸有限,及時能設計也有限,處理器處理不到那麼大得文件,何況我們雙核電腦有時候還會卡。

❸ Android 中有哪些感測器的數據是可以分享的

著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
作者:肥肥魚
來源:知乎

目前 Android 設備支持的感測器類型如下:
TYPE_ACCELEROMETER 加速度感測器又叫 G-sensor,該數值包含地心引力的影響,單位是 m/s2,測量應用於設備 x 、y、z 軸上的加速度。
將手機平放在桌面上,x 軸默認為0,y 軸默認0,z 軸默認9.81。
將手機朝下放在桌面上,z 軸為-9.81。
將手機向左傾斜,x 軸為正值。
將手機向右傾斜,x 軸為負值。
將手機向上傾斜,y 軸為負值。
將手機向下傾斜,y 軸為正值。

TYPE_AMBIENT_TEMPERATURE 溫度感測器,單位是 ℃,返回當前的溫度。
TYPE_GAME_ROTATION_VECTOR 用來探測運動而不必受到電磁干擾的影響,因為它並不依賴於磁北極。
TYPE_GEOMAGNETIC_ROTATION_VECTOR 地磁旋轉矢量感測器,提供手機的旋轉矢量,當手機處於休眠狀態時,仍可以記錄設備的方位。
TYPE_GRAVITY 重力感測器簡稱 GV-sensor,單位是 $m/s^2%,測量應用於設備X、Y、Z軸上的重力。在地球上,重力數值為9.8,
TYPE_GYROSCOPE 陀螺儀感測器叫做Gyro-sensor,返回x、y、z三軸的角加速度數據。單位是 radians/second。
TYPE_GYROSCOPE_UNCALIBRATED 未校準陀螺儀感測器,提供原始的、未校準、補償的陀螺儀數據,用於後期處理和融合定位數據。
TYPE_LIGHT 光線感應感測器檢測實時的光線強度,光強單位是lux,其物理意義是照射到單位面積上的光通量。
TYPE_LINEAR_ACCELERATION 線性加速度感測器簡稱LA-sensor。線性加速度感測器是加速度感測器減去重力影響獲取的數據。單位是 m/s2。
TYPE_MAGNETIC_FIELD 磁力感測器簡稱為M-sensor,返回 x、y、z 三軸的環境磁場數據。該數值的單位是微特斯拉(micro-Tesla),用uT表示。單位也可以是高斯(Gauss),1Tesla=10000Gauss。硬體上一般沒有獨立的磁力感測器,磁力數據由電子羅盤感測器提供(E-compass)。電子羅盤感測器同時提供方向感測器數據。
TYPE_MAGNETIC_FIELD_UNCALIBRATED 未校準磁力感測器,提供原始的、未校準的磁場數據。
TYPE_ORIENTATION 方向感測器簡稱為O-sensor,返回三軸的角度數據,方向數據的單位是角度。為了得到精確的角度數據,E-compass 需要獲取 G-sensor 的數據,經過計算生產 O-sensor 數據,否則只能獲取水平方向的角度。方向感測器提供三個數據,分別為azimuth、pitch和roll:
azimuth: 方位,返回水平時磁北極和 Y 軸的夾角,范圍為0°至360°。0°為北,90°為東,180°為南,270°為西。
pitch: x 軸和水平面的夾角,范圍為-180°至180°。當 z 軸向 y 軸轉動時,角度為正值。
roll: y 軸和水平面的夾角,由於歷史原因,范圍為-90°至90°。當 x 軸向 z 軸移動時,角度為正值。
TYPE_PRESSURE 壓力感測器,單位是hPa(百帕斯卡),返回當前環境下的壓強。
TYPE_PROXIMITY 接近感測器檢測物體與手機的距離,單位是厘米。一些接近感測器只能返回遠和近兩個狀態,因此,接近感測器將最大距離返回遠狀態,小於最大距離返回近狀態。
TYPE_RELATIVE_HUMIDITY 濕度感測器,單位是 %,來測量周圍環境的相對濕度。
TYPE_ROTATION_VECTOR 旋轉矢量感測器簡稱RV-sensor。旋轉矢量代表設備的方向,是一個將坐標軸和角度混合計算得到的數據。RV-sensor輸出三個數據:
x*sin(theta/2)
y*sin(theta/2)
z*sin(theta/2)
sin(theta/2)是 RV 的數量級。RV 的方向與軸旋轉的方向相同。RV 的三個數值,與cos(theta/2)組成一個四元組。
TYPE_SIGNIFICANT_MOTION 特殊動作觸發感測器。
TYPE_STEP_COUNTER 計步感測器,用於記錄激活後的步伐數。
TYPE_STEP_DETECTOR 步行檢測感測器,用戶每走一步就觸發一次事件。
TYPE_TEMPERATURE 溫度感測器,目前已被TYPE_AMBIENT_TEMPERATURE替代。

❹ 如何使用Android的VectorDrawable類繪制矢量圖

繪制矢量圖形非難事——如何使用Android的VectorDrawable類內容概述盡管Android系統並不能夠直接支持SVG(即可縮放矢量圖形),但Lollipop版本卻引入了一個名為VectorDrawable的新類,其允許設計人員及開發人員以純代碼方式生成類似的繪制效果。在今天的文章中,我們將共同學習如何利用XML文件創建一個VectorDrawable,並將其以動畫方式顯示在自己的項目當中。這項功能只能在運行有Android5.0或者更高版本的設備上實現,而且目前還不具備任何支持庫實現。本篇教程中的相關源文件可以通過GitHub網站獲取。1.創建VectorDrawable從相似角度來看,VectorDrawable與標准SVG圖形都是利用path值繪制完成的。不過如何利用SVGpath繪制圖形並不在本篇文章的探討范圍之內,大家可以點擊此處從W3C網站處獲取必要的說明資料。在本文當中,我們只需要了解到path標簽的作用是進行圖形繪制即可。讓我們首先從SVG文件入手,看看以下圖形是如何被繪制出來的:這一圖形共由五個主要部分所組成:一個圓角四邊形作為CPU主體,該四邊形由兩條拱狀弧線構成。四組各自包含五根線條的圖形,用於充當CPU的外延線路。以下代碼所示為如何以SVG方式繪制以上圖形:雖然看起來有點繁雜,但大家其實用不著糾結於以上代碼的具體含義,而且這完全不會影響到我們接下來要進行的VectorDrawable繪制工作。不過需要強調的是,我將前面提到的五大圖形組成部分在代碼中作為獨立的區塊來處理,這是為了增強代碼內容的可讀性。首先,我們需要利用兩條拱形弧線來繪制出圓角四邊形,而在接下來的內容中我們會探討如何分別表現出上、下、左、右四個方位的外延線條。為了將上述SVG代碼轉化為VectorDrawable,大家首先需要在XML當中定義vector對象。以下代碼提取自本篇文章示例代碼當中的vector_drawable_cpu.xml文件。在此之後,大家可以向其中添加path數據。下列代碼同樣被拆分成了五個不同的path標簽而非將其作為整體處理,這當然也是為了保證內容的可讀性。正如大家所見,每個path片段都只需要利用pathData屬性進行繪制。現在我們可以將VectorDrawableXML文件作為一個可繪制對象納入到標准ImageView當中,而且其能夠根據應用程序的實際需要任意進行尺寸縮放——完全不需要再修改任何Java代碼。2.為VectorDrawables添加動畫效果現在我們已經了解了如何以純代碼方式創建圖形,接下來要做的是找點樂子——為其添加動畫效果。在以下動畫中,大家會發現作為延伸線路的各組線條會不斷指向並遠離CPU本體進行移動。為了達到這一目標,大家需要將包含動畫效果的每個片段包含在一個標簽當中。經過修改的vector_drawable_cpu.xml版本將如下所示:接下來,我們需要為每個動畫類型創建animator文件。在本次示例中,每組線路各使用一個animator,這就意味著共需要四個animator。以下代碼所示為上方線路的動畫效果,大家還需要為下、左、右線路設定類似的效果。每個animatorXML文件都被包含在了本項目的示例代碼當中。如大家所見,propertyName被設定為translateY,這意味著該動畫將沿Y軸方向移動。而valueFrom與valueTo則控制著位移的起點與終點。通過將repeatMode設置為reverse而repeatCount設置為infinite,整個動畫會一直循環下去,其效果則在VectorDrawable處體現出來。該動畫的ration被設定為250,其時長單位為毫秒。為了將該動畫應用到自己的可繪制文件當中,大家需要創建一個新的animated-vectorXML文件,從而將這些animator分配給各VectorDrawable組。以下代碼的作用是創建該animated_cpu.xml文件。

❺ Android Support Library 23.2有哪些新東西

新特性:
支持Vector Drawable 和 Animated Vector Drawable

Vector drawables 讓自己可以用一個定義在XML里的矢量圖象替換多個png資源。而之前這一用法只局限於Lollipop以及更高的設備,VectorDrawable和AnimatedVectorDrawable現在可以分別通過兩個新的支持庫support-vector-drawable和support-animated-vector-drawable得到。

Android Studio 1.4 中介紹了一種通過在編譯時生成png的辦法對vector drawable提供了有限的支持。為了禁用這個功能(節省支持庫的空間,真正受益於新的庫),需要在 build.gradle文件里添加vectorDrawables.useSupportLibrary = true :

// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
需要注意這個新的屬性只有2.0版本的Gradle Plugin中才有。如果正在使用Gradle 1.5 ,則應該使用

// Gradle Plugin 1.5
android {
defaultConfig {
generatedDensities = []
}

// This is handled for you by the 2.0+ Gradle Plugin
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
可以使用兼容到API7的VectorDrawableCompat和兼容到API11或者更高的AnimatedVectorDrawableCompat。鑒於安卓載入drawable的方式,並不是每個接受drawable id的地方(比如在一個XML文件中)都支持載入vector drawable。幸好,AppCompat 添加了幾個功能讓自己更容易使用新的vector drawable。

首先,當自己和ImageView(或者例如 ImageButton 和 FloatingActionButton這樣的子類) 一起使用AppCompat的時候,可以使用新的app:srcCompat屬性來飲用 vector drawable(而任何其它drawable則用 android:src):

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_add" />
並且,如果要在運行時動態的改變drawable,可以使用和之前相同的 setImageResource() 方法 - 這點並沒有變。使用AppCompat和app:srcCompat是在app中集成vector drawable最簡單可靠的方式。

會發現在Lollipop之前直接在app:srcCompat之外引用vector drawable會失敗。但是AppCompat卻支持其它drawable 容器比如StateListDrawable, InsetDrawable, LayerDrawable, LevelListDrawable, 或者 RotateDrawable載入vector drawable。使用這種間接的方法,可以在這種情況下使用vector drawable,比如TextView的android:drawableLeft 屬性,本來在正常情況下,它是不支持vector drawable的。

AppCompat夜間白天主題

雖然在能各個版本的app中使用矢量圖像已經是一個很大的變化了,但是這個版本還在AppCompat中添加了一個新主題:Theme.AppCompat.DayNight。

在API 14,之前,DayNight theme以及它的繼承者DayNight.NoActionBar, DayNight.DarkActionBar, DayNight.Dialog等和light是一樣的。但是在API 14 a或者跟高設備上,這個主題可以輕易的讓app既支持Light又支持 Dark theme。可以根據是否為「night」從一個Light 主題切換到Dark主題。

默認情況下,是不是『night』跟系統的值(從UiModeManager.getNightMode()得到)是對應的,但是可以使用AppCompatDelegate中的方法覆蓋這個值。對於這個貫穿整個app(直到進程重啟)的默認值,可以使用靜態的AppCompatDelegate.setDefaultNightMode()方法去設置,或者可以通過getDelegate()得到一個AppCompatDelegate,並使用setLocalNightMode()去改變當前的Activity或者對話框。

當使用AppCompatDelegate.MODE_NIGHT_AUTO時,一天的時間和最近的地點(如果自己的app有地理位置許可權)會被用於自動切換白天和黑夜,而MODE_NIGHT_NO和MODE_NIGHT_YES則分別用於強制主題從不或者總是使用dark theme。

在使用DayNight主題的時候,務必要徹底測試一下app,因為硬編碼顏色容易造成可讀性差的文字和圖標(沒看懂)。如果自己的text使用的是標準的 TextAppearance.AppCompat樣式或者顏色是從主題里(比如從 android:textColorPrimary)得到的,會發現這些都會自動幫自己更新。

但是,如果想專門為夜間模式自定義任何資源,可以在AppCompat的 night resource qualifier folder(夜間資源目錄)里自定義需要的任何資源。為了讓對這個模式的支持變得更輕松,請考慮使用標準的顏色或者利用AppCompat的tinting (著色)。

Design Support Library: Bottom Sheets

Design Support Library 提供了許多 material design 設計模式的實現。這個版本讓開發者可以輕松的把 bottom sheet 添加到他們的app中。

通過為 CoordinatorLayout的子View設置一個BottomSheetBehavior(比如:app:layout_behavior=」android.support.design.widget.BottomSheetBehavior」),將自動得到能在5個狀態間切換的觸摸檢測功能:

STATE_COLLAPSED: 這是折疊狀態 ,也是默認的狀態。只是在底部邊沿顯示布局的一部分。其高度可以使用 app:behavior_peekHeight 屬性來控制(默認是0)。
STATE_DRAGGING: 這是中間狀態,此時用戶直接上下拖動 bottom sheet。
STATE_SETTLING: 視圖被釋放之後-到達最終位置之間的瞬間。
STATE_EXPANDED: bottom sheet完全展開的狀態。 整個bottom sheet都是可見的(如果它的高度小於包含它的CoordinatorLayout)或者整個CoordinatorLayout都是填滿的。
STATE_HIDDEN: 默認禁用是的(使用app:behavior_hideable屬性來啟用 ), 如果這個啟用,用戶可以在 bottom sheet中下滑以完全隱藏bottom sheet
記住,bottom sheet 中的滾動容器必須支持嵌套滾動(比如,NestedScrollView, RecyclerView, 或者 API 21+上的ListView/ScrollView )。
如果想要收到狀態的回調,可以添加一個BottomSheetCallback:

// The View with the BottomSheetBehavior View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// React to state change
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
}
});
雖然BottomSheetBehavior針對的是 持久性型 bottom sheet 的情景,但是這個版本還提供了BottomSheetDialog 和 BottomSheetDialogFragment 來完成 模態 bottom sheets 的用例。把AppCompatDialog 或者 AppCompatDialogFragment替換成相應的bottom sheet版本即可。讓自己的對話框使用bottom sheet風格的樣式。

Support v4: MediaBrowserServiceCompat

Support v4 library 作為許多支持庫的基礎,包含了許多在較新版本中才引入的framework功能(以及幾個獨特的功能)。

在上個版本中添加的 MediaSessionCompat 類為媒體播放提供了堅實的基礎,這個版本咱們添加了MediaBrowserServiceCompat 和 MediaBrowserCompat ,把最新的API(甚至是Marshmallow中添加的那些)向後兼容到API 4 及以上。這讓支持Android Auto上的音頻播放,Android Wear 上的媒體瀏覽變得簡單多了。另外,還為連接media playback service和UI提供了一個標準的介面。

RecyclerView

RecyclerView 控制項提供了靈活一種創建列表和網格的基本方案,而且還支持動畫。這個版本為 LayoutManager API帶來了一個非常激動人心的新特性:自動測量!讓RecyclerView可以根據其內容的大小調整自己。這意味著以前那些無解的場景,比如對RecyclerView的一個dimension 使用WRAP_CONTENT成為了可能。會發現所有的內置LayoutManager現在都支持自動測量。

因為這個變化的原因,得仔細檢查 item view的 layout parameters 了:以前會被自動忽略的 layout parameters(比如在滾動方向上的MATCH_PARENT ),現在會被完全考慮進去。如果有一個自定義的LayoutManager,且沒有繼承自內置的LayoutManager,那麼這就是一個可選的API - 需要調用setAutoMeasureEnabled(true) 並且根據這個方法的Javadoc中的描述做一些微小的改變。

注意,雖然RecyclerView可以讓自己的子View動畫,但是它不能動畫自己的邊界改變。如果想要讓RecyclerView的邊界變化也呈現動畫,可以使用 Transition API。

Custom Tabs

Custom Tabs 可以在保持app風格與外觀的同時無縫切換到web內容頁。而在這個版本中,可以向一個顯示在web內容旁邊的底部bar添加操作項。註:以前只能在頂部的溢出菜單裡面添加。

有了新的addToolbarItem()方法,就可以添加最多5個(MAX_TOOLBAR_ITEMS)actions到bottom bar 上,並使用setToolbarItem() 來更新它們。類似於之前的setToolbarColor()方法,可以找到一個 setSecondaryToolbarColor()方法來自定義bottom bar的背景顏色。

Leanback for Android TV

Leanback 庫給了把app帶到Android TV上所需要的工具, 裡面有許多專門為TV而優化的控制項。這個版本的GuidedStepFragment 做了一些列重大改進。

最大的改變可能就是引入了action button的第二列(通過重寫onCreateButtonActions()或者調用 setButtonActions()來添加)。不需要滾動完一個 GuidedActions列表就能到達所有的action。

說到GuidedAction,有幾個讓輸入更佳豐富的新特性,包括editable descriptions (通過descriptionEditable()), 表單中dropdown裡面的sub action(用subActions()),以及GuidedDatePickerAction。

❻ 如何自學 Android 編程

自學Android開發可以分階段學習安排,由基礎學起,在學習中可以能會遇到很多問題,這就需要多向別人請教解決了,自學會稍微吃力些,有人帶學是最好不過的。學Android編程可以參照以下階段來學習安排:

第一階段:Java面向對象編程
1.Java基本數據類型與表達式,分支循環。
2.String和StringBuffer的使用、正則表達式。
3.面向對象的抽象,封裝,繼承,多態,類與對象,對象初始化和回收;構造函數、this關鍵字、方法和方法的參數傳遞過程、static關鍵字、內部類,Java的垃極回收機制,Javadoc介紹。
4.對象實例化過程、方法的覆蓋、final關鍵字、抽象類、介面、繼承的優點和缺點剖析;對象的多態性:子類和父類之間的轉換、抽象類和介面在多態中的應用、多態帶來的好處。
5.Java異常處理,異常的機制原理。
6.常用的設計模式:Singleton、Template、Strategy模式。
7.JavaAPI介紹:種基本數據類型包裝類,System和Runtime類,Date和DateFomat類等。
8.Java集合介紹:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等常用集合類API。 9.Java I/O輸入輸出流:File和FileRandomAccess類,位元組流InputStream和OutputStream,字元流Reader和Writer,以及相應實現類,IO性能分析,位元組和字元的轉化流,包裝流的概念,以及常用包裝類,計算機編碼。
10.Java高級特性:反射、代理和泛型。
11.多線程原理:如何在程序中創建多線程(Thread、Runnable),線程安全問題,線程的同步,線程之間的通訊、死鎖。 12.Socket網路編程。

第二階段:Java Web開發
1.Java解析XML文件DOM4J。
2.MySql資料庫的應用、多表連接查詢的應用。
3.Jsp和Servlet應用。
4.Http協議解析。
5.Tomcat伺服器的應用配置。
6.WebService服務配置應用。

第三階段:android UI編程
1、Android開發環境搭建:Android介紹,Android開發環境搭建,第一個Android應用程序,Android應用程序目錄結構。
2、Android初級控制項的使用:
TextView控制項的使用Button控制項的使用方法EditText控制項的使用方法ImageView的使用方法RadioButton的使用方法Checkbox的使用方法Menu的使用方法
3、Android高級控制項的使用:
Autocompletion的使用方法ListView的使用方法GridView的使用方法Adapter的使用方法Spinner的使用方法Gallary的使用方法ScrollView的使用方法
4、對話框與菜單的使用:
Dialog的基本概念AlertDialog的使用方法DatePickerDialog的使用方法Menu的使用方法自定義Menu的實現方法
5、控制項的布局方法:
線性布局的使用方法相對布局的使用方法表格布局的使用方法
6、多Acitivity管理:
AndroidManifest.xml文件的作用 Intent的使用方法使用Intent傳遞數據的方法啟動Activity的方法IntentFilter的使用方法Activity Group的使用方法
7、自定義控制項實現方法:
自定義ListView的實現方法可折疊ListView的使用方法自定義Adapter的實現方法自定義View的實現方法動態控制項布局的上實現方法

第四階段:android網路編程與數據存儲
1、基於Android平台的HTTP通訊:
Http協議回顧Apache Commons 工具包介紹使用Get方法向伺服器提交數據的方法解析伺服器響應數據的方法使用POST方法向伺服器提交數據的實現方法向伺服器提交非文本數據的實現方法使用Http協議實現多線程下載使用Http協議實現斷點續傳
2、Android數據存儲技術:
SQLite3資料庫簡介SQL語句回顧SQLite3編程介面介紹SQLite3事務管理SQLite3游標使用方法SQLite3性能分析訪問SDCard的方法訪問SharedPreferences的方法
3、ContentProvider使用方法:
ContentProvider實現共享數據、URI的解析與UriMatcher、ContentUris的使用、使用ContentResolver操作ContentProvider、ContentProvider的監聽Android當中的非同步操作:Handler的使用方法;非同步任務的基本概念;AsyncTask的使用方法。

第五階段:android手機硬體管理
1、地圖及定位技術:GPS簡介;LocationManager的使用方法;在Google Map上添加標記的方法;查詢某地附近建築的方法;使用Google Map實現點對點導航。
2、感測器使用方法:方向、加速度(重力)、光線、磁場、距離、溫度等感測器的使用。
3、近場通信技術:NFC技術簡介;NFC技術是用場景介紹;NFC技術實現方法。
4、媒體管理技術:MediaPlayer的使用方法。
5、觸摸屏技術:手勢識別;多點觸摸技術。

第六階段:Android圖形編程技術
1、圖形處理基礎:2D圖形編程基礎;
2、點、線、面等基本圖形元素繪制方法;
3、Android動畫框架簡介;
4、位移動畫的實現方法;
5、淡入淡出動畫的實現方法;
6、旋轉動畫的實現方法;
7、Matrix的使用方法。

第七階段:Android游戲開發
1、Android游戲開發:Android游戲開發概述;
2、SurfaceView的使用方法;
3、物理小球技術;
4、碰撞檢測技術;
5、圖片、文字和背景音樂等資源的使用方法;
6、游戲引擎基礎概念;
7、Cocoa2d-Android引擎使用方法;
8、OpenGL ES使用方法。

自學一般人會很難堅持下去,學習中遇到的問題解決效率不是很高,可以參加明確講師授課的Android開發培訓班,由資深高級講師帶領學習,和同學們共同學習,遇到問題互相解決,學習效率還是非常高的。

❼ android 中vector的用法 坑 怎麼替代,關於這幾方面的一些看法

在安卓的發展歷程中,由於設備碎片化的原故,谷歌在app中圖標的適配上做出一步又一步的改進,大體有這么幾個階段:

首先有了drawable-(m|h|xh|xxh|xxxh)dpi
自android studio後,又有了mipmap-(m|h|xh|xxh|xxxh)dpi
隨著android L的發布,帶來了VectorDrawable,矢量圖的支持
第一種方案大家都很熟悉, 但也是我們頭痛的地方,因為每種icon都需要出幾套不同解析度,這無形的增加了app的容量,而且也增加了美工和開發人員的工作量,但是我們又不得不去做。

❽ 如何玩轉Android矢量圖VectorDrawable

從5.0(API等級21)開始,android開始支持矢量圖了。關於什麼是矢量圖以及矢量圖有什麼優缺點不在本文的涉及范圍之內,具體可以參考矢量圖網路。不過這里要提一下它的優點:
保存最少的信息,文件大小比點陣圖要小,並且文件大小與物體的大小無關
任意放大矢量圖形,不會丟失細節或影響清晰度,因為矢量圖形是與解析度無關的。

從以上兩個優點來看,在項目中使用矢量圖至少可以縮小我們apk包的尺寸,而且可以在屏幕適配時提供很大的方便,因為矢量圖是解析度無關的。
前面也說了,矢量圖從21才開始支持。那麼如果我想往下兼容改怎麼辦呢?這個問題要放在以前的話,我會說github下就有你要的答案。但現在我不會這么說,因為前段時間Google升級了support library,官方向後兼容了矢量圖的使用。要問兼容到哪個版本,我告訴你矢量圖兼容到API7,矢量圖動畫兼容到API11(是不是已經滿足了你的使用)。
好了,下面我們就來說說怎麼在項目中使用矢量圖。
一、VectorDrawable的使用
按照官方的說法,要在低版本上使用矢量圖,需要在項目中引入新的兼容庫support-vector-drawable,並且appcompat-v7庫的版本要在23.2.0+(寫文章這會23.2.1已經發布了)。而且你還要修改下gradle的相關配置,不要讓gradle在構建的時候為你在低版本(API21以下)的情況下生成針對於不同密度的png文件,因為android studio1.4的時候支持了矢量圖。
修改appcompat-v7的版本
compile 'com.android.support:appcompat-v7:23.2.0'
NOTE: 這里我只引入了23.2.0版本的appcompat-v7庫,同步gradle後就編譯出了support-vector-drawable-23.2.0和animated-vector-drawable-23.2.0這兩個庫。
修改gradle配置文件
如果你的gradle插件的版本為2.0以下,你應該這么修改

android {
defaultConfig {
// 不讓gradle自動生成不同屏幕解析度的png圖
generatedDensities = []
}

aaptOptions {
additionalParameters "--no-version-vectors"
}
}

如果你的gradle插件版本是2.0+,你 應該這么修改

android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}

經過上面這幾步的修改,你就可以在項目中使用矢量圖了。那麼,下面我們就正式來說說怎麼使用。
android studio為我們提供了一個Vector Asset Studio的工具,讓我么可以從material icon和svg文件生成矢量圖。具體用法可以參考官方的說明文檔,這里就不多說了。
Android中矢量圖是以xml文檔的形式存在的,像下面這樣就定義了一個矢量圖,裡麵包含了關於該矢量圖的數據信息。
<!-- res/drawable/heart.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8zM15.5,11c0.83,0 1.5,-0.67 1.5,-1.5S16.33,8 15.5,8 14,8.67 14,9.5s0.67,1.5 1.5,1.5zM8.5,11c0.83,0 1.5,-0.67 1.5,-1.5S9.33,8 8.5,8 7,8.67 7,9.5 7.67,11 8.5,11zM12,17.5c2.33,0 4.31,-1.46 5.11,-3.5L6.89,14c0.8,2.04 2.78,3.5 5.11,3.5z" />
</vector>

這是我通過material icon生成的,它在android中對應著VectorDrawable這個類,也就是兼容包中的VectorDrawableCompat這個類。
定義好矢量圖形後,我們就可以向普通的圖形那樣來使用它了。不過有幾點需要注意:
*使用android:src屬性的地方需要替換為app:srcCompat屬性

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.damon.vectordrawabledemo.MainActivity">

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_mood_black_24dp" />
</RelativeLayout>

*在非src屬性的地方使用矢量圖時,需要將矢量圖用drawable容器(如StateListDrawable, InsetDrawable, LayerDrawable, LevelListDrawable, 和RotateDrawable)包裹起來使用。否則會在低版本的情況下報錯。
而在代碼中的使用和普通的png圖沒什麼區別,調用的是同樣的API。

❾ android ndk編譯jni vector<string> 怎麼返回

加入頭文件 #include 函數 __android_log_print(ANDROID_LOG_INFO,LOG_TAG,TITLE) 第一個參數ANDROID_LOG_INFO(還有ANDROID_LOG_ERROR等),表示什麼類型 的輸出,上面的函數相當於android的java代碼的Log.i(LOG_TAG,TITLE),第二個參數就是logc...

❿ android源碼里有哪些比較好的演算法或框架推薦

Android中對於圖形界面以及多媒體的相關操作比較容易實現。而且對於大多數
手機
用戶來說,他們主要也就是根據這些方面的功能來對系統那個進行修改。我們可以通過本文介紹的Android多媒體框架的源碼解讀,來具體分析一下這方面的基本知識。
Android多媒體框架的代碼在以下目錄中:external/opencore/。這個目錄是Android多媒體框架的根目錄,其中包含的子目錄如下所示:
* android:這裡面是一個上層的庫,它基於PVPlayer和PVAuthor的SDK實現了一個為Android使用的Player和Author。
* baselibs:包含數據結構和線程安全等內容的底層庫
* codecs_v2:這是一個內容較多的庫,主要包含編解碼的實現,以及一個OpenMAX的實現
* engines:包含PVPlayer和PVAuthor引擎的實現
* extern_libs_v2:包含了khronos的OpenMAX的頭文件
* fileformats:文件格式的據具體解析(parser)類
* nodes:編解碼和文件解析的各個node類。
* oscl:操作系統兼容庫
* pvmi: 輸入輸出控制的抽象介面
* protocols:主要是與網路相關的RTSP、RTP、HTTP等協議的相關內容
* pvcommon:pvcommon庫文件的Android.mk文件,沒有源文件。
* pvplayer:pvplayer庫文件的Android.mk文件,沒有源文件。
* pvauthor:pvauthor庫文件的Android.mk文件,沒有源文件。
* tools_v2:編譯工具以及一些可注冊的模塊。
Splitter的定義與初始化
以wav的splitter為例,在fileformats目錄下有解析wav文件格式的pvwavfileparser.cpp文件,在nodes目錄下有pvmf_wavffparser_factory.cpp,pvmf_wavffparser_node.h, pvmf_wavffparser_port.h等文件。
我們由底往上看,vwavfileparser.cpp中的PV_Wav_Parser類有InitWavParser(),GetPCMData(),RetrieveFileInfo()等解析wav格式的成員函數,此類應該就是最終的解析類。我們搜索PV_Wav_Parser類被用到的地方可知,在PVMFWAVFFParserNode類中有PV_Wav_Parser的一個指針成員變數。
再搜索可知,PVMFWAVFFParserNode類是通過PVMFWAVFFParserNodeFactory的CreatePVMFWAVFFParserNode()成員函數生成的。而CreatePVMFWAVFFParserNode()函數是在PVPlayerNodeRegistry::PVPlayerNodeRegistry()類構造函數中通過PVPlayerNodeInfo類被注冊到Oscl_Vector<PVPlayerNodeInfo, OsclMemAllocator> 的vector中,在這個構造函數中,AMR,mp3等node也是同樣被注冊的。
由上可知,Android多媒體框架中對splitter的管理也是與ffmpeg等類似,都是在框架的初始化時注冊的,只不過Opencore注冊的是每個splitter的factory函數。
綜述一下splitter的定義與初始化過程:
每個splitter都在fileformats目錄下有個對應的子目錄,其下有各自的解析類。
每個splitter都在nodes目錄下有關對應的子目錄,其下有各自的統一介面的node類和node factory類。
播放引擎PVPlayerEngine類中有PVPlayerNodeRegistry iPlayerNodeRegistry成員變數。
在PVPlayerNodeRegistry的構造函數中,將 AMR, AAC, MP3等splitter的輸入與輸出類型標示和node factory類中的create node與release delete介面通過PVPlayerNodeInfo類push到Oscl_Vector<PVPlayerNodeInfo, OsclMemAllocator> iType成員變數中。
當前Splitter的匹配過程
PVMFStatus PVPlayerNodeRegistry::QueryRegistry(PVMFFormatType& aInputType, PVMFFormatType& aOutputType, Oscl_Vector<PVUuid, OsclMemAllocator>& aUuids)函數的功能是根據輸入類型和輸出類型,在已注冊的node vector中尋找是否有匹配的node,有的話傳回其唯一識別標識PVUuid。
從QueryRegistry這個函數至底向上搜索可得到,在android中splitter的匹配過程如下:
android_media_MediaPlayer.cpp之中定義了一個JNINativeMethod(JAVA本地調用方法)類型的數組gMethods,供java代碼中調用MultiPlayer類的setDataSource成員函數時找到對應的c++函數
1.{"setDataSource", "(Ljava/lang/String;)V", (void *)
android_media_MediaPlayer_setDataSource},
2.static void android_media_MediaPlayer_setDataSource
(JNIEnv *env, jobject thiz, jstring path)
此函數中先得到當前的MediaPlayer實例,然後調用其setDataSource函數,傳入路徑
3.status_t MediaPlayer::setDataSource(const char *url)
此函數通過調getMediaPlayerService()先得到當前的MediaPlayerService, const sp<IMediaPlayerService>& service(getMediaPlayerService());
然後新建一個IMediaPlayer變數, sp<IMediaPlayer> player(service->create(getpid(), this, fd, offset, length));
在sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url)中
調status_t MediaPlayerService::Client::setDataSource(const char *url)函數,Client是MediaPlayerService的一個內部類。
在MediaPlayerService::Client::setDataSource中,調sp<MediaPlayerBase> MediaPlayerService::Client::createPlayer(player_type playerType)
生成一個繼承自MediaPlayerBase的PVPlayer實例。

熱點內容
無線網卡怎麼改密碼 發布:2025-01-18 06:54:41 瀏覽:765
ava動態編譯 發布:2025-01-18 06:54:39 瀏覽:764
中國學位論文全文資料庫 發布:2025-01-18 06:43:49 瀏覽:688
全局變數存儲類別 發布:2025-01-18 06:39:29 瀏覽:423
蘋果平板的王者號如何轉移到安卓 發布:2025-01-18 06:37:11 瀏覽:611
圖片訪問量 發布:2025-01-18 06:36:34 瀏覽:497
數據結構與演算法下載 發布:2025-01-18 06:36:32 瀏覽:314
如何租ip伺服器 發布:2025-01-18 06:29:07 瀏覽:117
sql周的第一天 發布:2025-01-18 06:29:05 瀏覽:887
安卓軟體如何看本地視頻 發布:2025-01-18 06:28:24 瀏覽:927