国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖

這篇具有很好參考價(jià)值的文章主要介紹了Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

實(shí)戰(zhàn)

輸入搜索動(dòng)畫

  1. 利用在線繪制 SVG 圖標(biāo)網(wǎng)站 制作搜索圖標(biāo)

可以自己隨意搗鼓繪制,繪制好了之后點(diǎn)擊視圖->源代碼,將 SVG 代碼復(fù)制出來(lái)保存成 search_svg.xml

  1. 在線轉(zhuǎn)換 svg2vector

點(diǎn)擊空白或者直接將 SVG 拖拽指定區(qū)域進(jìn)行轉(zhuǎn)換

  1. 將轉(zhuǎn)換好的 Android 格式的 vector 導(dǎo)入 AS

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

  1. 開始制作動(dòng)畫關(guān)聯(lián)

//1.在 /res/aniamator 文件夾下 定義動(dòng)畫

<?xml version="1.0" encoding="utf-8"?>

<objectAnimator xmlns:android=“http://schemas.android.com/apk/res/android”
android:propertyName=“trimPathStart”
android:valueFrom=“1”
android:valueTo=“0”
android:duration=“2000”

//2. 在/res/drawable/ 定義 vector

<?xml version="1.0" encoding="utf-8"?>




//3. 在/res/drawable/ 關(guān)聯(lián)動(dòng)畫和 vector

<?xml version="1.0" encoding="utf-8"?>
  1. 效果

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

警車燈閃爍

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

今日頭條下拉刷新動(dòng)畫

來(lái)一個(gè)復(fù)雜組合動(dòng)畫,請(qǐng)看下面效果圖:

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

  1. 準(zhǔn)備 vector 數(shù)據(jù)




  1. 定義順時(shí)針執(zhí)行動(dòng)畫并做 pathData 變換

這里拿其中一個(gè)位置變化來(lái)舉例說(shuō)明:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android=“http://schemas.android.com/apk/res/android”

android:ordering=“sequentially”>//按順序執(zhí)行

//依次執(zhí)行 pathData 位置變換

<objectAnimator

android:duration=“600”
android:interpolator=“@android:interpolator/decelerate_cubic”
android:propertyName=“pathData”
android:valueFrom="
M100,30
L180,30
M180,30
L180,90
M180,90
L100,90
M100,90
L100,30"
android:valueTo="
M100,120
L180,120
M180,120
L180,180
M180,180
L100,180
M100,180
L100,120"
android:valueType=“pathType” />
<objectAnimator

android:duration=“600”
android:interpolator=“@android:interpolator/decelerate_cubic”
android:propertyName=“pathData”
android:valueFrom="
M100,120
L180,120
M180,120
L180,180
M180,180
L100,180
M100,180
L100,120"
android:valueTo="
M20,120
L100,120
M100,120
L100,180
M100,180
L20,180
M20,180
L20,120"
android:valueType=“pathType” />
<objectAnimator

android:duration=“600”
android:interpolator=“@android:interpolator/decelerate_cubic”
android:propertyName=“pathData”
android:valueFrom="
M20,120
L100,120
M100,120
L100,180
M100,180
L20,180
M20,180
L20,120"
android:valueTo="
M20,30
L100,30
M100,30
L100,90
M100,90
L20,90
M20,90
L20,30"
android:valueType=“pathType” />

如果對(duì)標(biāo)簽中的定義還不了解的先去看下文章中 path 標(biāo)簽 中的說(shuō)明。如果不理解標(biāo)簽意思,根本就看不懂。

  1. 進(jìn)行關(guān)聯(lián)
<?xml version="1.0" encoding="utf-8"?>

<animated-vector xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:drawable=“@drawable/ic_toutiao”

tools:targetApi=“l(fā)ollipop”>

  1. 代碼控制重復(fù)執(zhí)行

class SVGDemo1Activity : AppCompatActivity() {

var reStartTT = @SuppressLint(“HandlerLeak”)
object : Handler() {
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
startAnimatabe(R.drawable.line_animated_toutiao, true)
}
}

@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_svg)

//水滴動(dòng)畫
startWaterDropAnimator.setOnClickListener {
startAnimatabe(R.drawable.line_animated_vector, false)
}
//搜索動(dòng)畫
startSearchAnimator.setOnClickListener {
startAnimatabe(R.drawable.line_animated_search, false)
}
//執(zhí)行警車動(dòng)畫
startPoliceCarAnimator.setOnClickListener {
startAnimatabe(R.drawable.line_animated_car, false)
}
//執(zhí)行頭條動(dòng)畫
startTTAnimator.setOnClickListener {
startAnimatabe(R.drawable.line_animated_toutiao, true)
}
}

private fun startAnimatabe(lineAnimatedVector: Int, isRegister: Boolean): Animatable {
val animatedVectorDrawable = AnimatedVectorDrawableCompat.create(this, lineAnimatedVector)
iv.setImageDrawable(animatedVectorDrawable)
val animatable = iv.drawable as Animatable
animatable.start()
animatedVectorDrawable!!.registerAnimationCallback(object : Animatable2Compat.AnimationCallback() {
override fun onAnimationEnd(drawable: Drawable?) {
super.onAnimationEnd(drawable)
if (!isRegister) return
animatedVectorDrawable.unregisterAnimationCallback(this)
//重新開始在 xml 設(shè)置 restart 無(wú)效暫時(shí)用 Handler 實(shí)現(xiàn)了。
reStartTT.sendEmptyMessage(0)

}
})
return animatable

}
}

繪制中國(guó)地圖

該篇之前實(shí)現(xiàn) SVG pathData 都是利用 ImageView 來(lái)實(shí)現(xiàn),并不是所有的場(chǎng)合都適合上面的方式,比如我想要實(shí)現(xiàn) pathData 區(qū)域點(diǎn)擊,那么上面所講的方式應(yīng)該是不能實(shí)現(xiàn),下面我們以一個(gè)實(shí)例來(lái)看怎么自定義 View 實(shí)現(xiàn) PathData 和 pathData 區(qū)域點(diǎn)擊事件。

下面我們利用 path 來(lái)繪制一個(gè)中國(guó)地圖,先來(lái)看一個(gè)最終效果圖,如下:

看起來(lái)是不是很炫,還不錯(cuò),嘿嘿,下面我們就來(lái)看一下如何實(shí)現(xiàn)。

  1. 準(zhǔn)備地圖 SVG
  • 首先去下載地圖數(shù)據(jù)

  • 選擇下載免費(fèi)的地圖數(shù)據(jù)

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

  • 找到對(duì)應(yīng)的國(guó)家點(diǎn)擊下載 svg 數(shù)據(jù)

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

  • 選擇對(duì)應(yīng)的地圖數(shù)據(jù),我這里下載的是高質(zhì)量的 SVG

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

  1. SVG to Vector xml

將下載好的 china.svg 格式的文件轉(zhuǎn)為 vector 節(jié)點(diǎn)的 xml 數(shù)據(jù) 或者用 AS 自帶轉(zhuǎn)也行,看個(gè)人愛好。

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

轉(zhuǎn)好之后放入 AS 中,如下所示

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

現(xiàn)在有了這些數(shù)據(jù),我們就可以解析 xml path 節(jié)點(diǎn),拿到 pathData 數(shù)據(jù)我們不就可以繪制 path 了嘛。下面就開始解析 xml ,解析的方法很多種,我們這里用 dom 解析。

  1. 開始解析 xml

解析 xml 有很多種方式,這里就直接使用 DOM 解析,pathData2Path 我這里直接用 Android SDK 提供的 android.support.v4.graphics#PathParser 由于源碼中它被標(biāo)注了 hide 屬性 ,我們需要直接將它 copy 到我們自己項(xiàng)目中, 具體轉(zhuǎn)化請(qǐng)看如下代碼:

/**

  • 開始解析 xml
    */
    public fun dom2xml(stream: InputStream?): MutableList {
    mapDataLists.clear()
    //dom
    val newInstance = DocumentBuilderFactory.newInstance()
    val newDocumentBuilder = newInstance.newDocumentBuilder()
    //拿到 Docment 對(duì)象
    val document = newDocumentBuilder.parse(stream)
    //獲取 xml 中屬于 path 節(jié)點(diǎn)的所有信息
    val elementsByTagName = document.getElementsByTagName(PATH_TAG)

//定義四個(gè)點(diǎn),確定整個(gè) map 的范圍
var left = -1f
var right = -1f
var top = -1f
var bottom = -1f
//開始遍歷標(biāo)簽,拿到 path 數(shù)據(jù)組
for (pathData in 0 until elementsByTagName.length) {
val item = elementsByTagName.item(pathData) as Element

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過(guò),也去過(guò)華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。

深知大多數(shù)初中級(jí)安卓工程師,想要提升技能,往往是自己摸索成長(zhǎng),但自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年最新Android移動(dòng)開發(fā)全套學(xué)習(xí)資料》送給大家,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui
Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui
Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui
Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

由于文件比較大,這里只是將部分目錄截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻
如果你覺得這些內(nèi)容對(duì)你有幫助,可以添加下面V無(wú)償領(lǐng)取?。▊渥ndroid)
Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

總結(jié)

其實(shí)要輕松掌握很簡(jiǎn)單,要點(diǎn)就兩個(gè):

  1. 找到一套好的視頻資料,緊跟大牛梳理好的知識(shí)框架進(jìn)行學(xué)習(xí)。
  2. 多練。 (視頻優(yōu)勢(shì)是互動(dòng)感強(qiáng),容易集中注意力)

你不需要是天才,也不需要具備強(qiáng)悍的天賦,只要做到這兩點(diǎn),短期內(nèi)成功的概率是非常高的。

對(duì)于很多初中級(jí)Android工程師而言,想要提升技能,往往是自己摸索成長(zhǎng),不成體系的學(xué)習(xí)效果低效漫長(zhǎng)且無(wú)助。下面資料部分截圖是我花費(fèi)幾個(gè)月時(shí)間整理的,誠(chéng)意滿滿:特別適合有3-5年開發(fā)經(jīng)驗(yàn)的Android程序員們學(xué)習(xí)。

  • 自行下載直達(dá)領(lǐng)取鏈接:【點(diǎn)擊我即可獲得!】
  • 以上進(jìn)階BATJ大廠學(xué)習(xí)資料可以免費(fèi)分享給大家,需要完整版的朋友,【點(diǎn)這里可以看到全部?jī)?nèi)容】。

Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖,Android程序員,android,ui

  1. 找到一套好的視頻資料,緊跟大牛梳理好的知識(shí)框架進(jìn)行學(xué)習(xí)。
  2. 多練。 (視頻優(yōu)勢(shì)是互動(dòng)感強(qiáng),容易集中注意力)

你不需要是天才,也不需要具備強(qiáng)悍的天賦,只要做到這兩點(diǎn),短期內(nèi)成功的概率是非常高的。

對(duì)于很多初中級(jí)Android工程師而言,想要提升技能,往往是自己摸索成長(zhǎng),不成體系的學(xué)習(xí)效果低效漫長(zhǎng)且無(wú)助。下面資料部分截圖是我花費(fèi)幾個(gè)月時(shí)間整理的,誠(chéng)意滿滿:特別適合有3-5年開發(fā)經(jīng)驗(yàn)的Android程序員們學(xué)習(xí)。

  • 自行下載直達(dá)領(lǐng)取鏈接:【點(diǎn)擊我即可獲得!】
  • 以上進(jìn)階BATJ大廠學(xué)習(xí)資料可以免費(fèi)分享給大家,需要完整版的朋友,【點(diǎn)這里可以看到全部?jī)?nèi)容】。

[外鏈圖片轉(zhuǎn)存中…(img-SsLI5Tmv-1710506193935)]文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-841694.html

到了這里,關(guān)于Android-高級(jí)-UI-進(jìn)階之路-(七)-SVG-基礎(chǔ)使用-+-繪制中國(guó)地圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android-高級(jí)-UI-進(jìn)階之路-(五)-看完該篇文章-Canvas-你應(yīng)該會(huì)了

    Android-高級(jí)-UI-進(jìn)階之路-(五)-看完該篇文章-Canvas-你應(yīng)該會(huì)了

    /** 1. 繪制橢圓 */ canvas.drawOval(RectF(100f,500f,600f,800f),mPaint) /** 2. 繪制圓 */ mPaint.setColor(Color.YELLOW) mPaint.alpha = 100 canvas.drawCircle(400f,400f,200f,mPaint) 繪制 Bitmap // val bitmap = BitmapFactory.decodeResource(context.resources, R.mipmap.gild_3) //第二個(gè),第三個(gè)參數(shù)代表起點(diǎn)位置 canvas.drawBitmap(bitmap,100f,100

    2024年03月28日
    瀏覽(11)
  • 靈魂畫師,Android繪制流程——Android高級(jí)UI(1)

    靈魂畫師,Android繪制流程——Android高級(jí)UI(1)

    繪制流程從何而起 Activity 的界面結(jié)構(gòu)在哪里開始形成 繪制流程如何運(yùn)轉(zhuǎn)起來(lái) 接下來(lái)我們就一個(gè)個(gè)目標(biāo)來(lái) conquer。 我們一說(shuō)到 繪制流程 ,就會(huì)想到或是聽過(guò) onMeasure 、 onLayout 、 onDraw 這三個(gè)方法,但是有沒想過(guò)為什么我們開啟一個(gè)App或是點(diǎn)開一個(gè)Activity,就會(huì)觸發(fā)這一系列流

    2024年04月17日
    瀏覽(31)
  • Android架構(gòu)進(jìn)階之高級(jí)UI系列(精編解析,值得收藏)

    Android架構(gòu)進(jìn)階之高級(jí)UI系列(精編解析,值得收藏)

    public FrameHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DO_FRAME: // 執(zhí)行doFrame // 如果啟用VSYNC機(jī)制,當(dāng)VSYNC信號(hào)到來(lái)時(shí)觸發(fā) doFrame(System.nanoTime(), 0); break; case MSG_DO_SCHEDULE_VSYNC: // 申請(qǐng)VSYNC信號(hào),例如當(dāng)前需要繪制任務(wù)時(shí) doScheduleVsync()

    2024年04月14日
    瀏覽(28)
  • Android架構(gòu)進(jìn)階之高級(jí)UI系列(精編解析,值得收藏),Android開發(fā)面試技能介紹

    Android架構(gòu)進(jìn)階之高級(jí)UI系列(精編解析,值得收藏),Android開發(fā)面試技能介紹

    CallbackRecord callbacks; synchronized (mLock) { final long now = System.nanoTime(); // 根據(jù)指定的類型CallbackkQueue中查找到達(dá)執(zhí)行時(shí)間的CallbackRecord callbacks = mCallbackQueues[callbackType].extractDueCallbacksLocked( now / TimeUtils.NANOS_PER_MS); if (callbacks == null) { return; } mCallbacksRunning = true; if (callbackType == Choreograph

    2024年04月13日
    瀏覽(21)
  • Android之 SVG繪制

    Android之 SVG繪制

    一 SVG介紹 1.1?SVG(Scalable Vector Graphics)是可縮放矢量圖形的縮寫,它是一種圖形格式,其中形狀在XML中指定, 而XML又由SVG查看器呈現(xiàn)。 1.2 SVG可以區(qū)別于位圖,放大可以做到不模糊,可以做一些圖標(biāo),按鈕等繪制,但太復(fù)雜的話會(huì)導(dǎo)致渲染速度慢,占用內(nèi)存大。適合簡(jiǎn)單的圖

    2024年02月09日
    瀏覽(15)
  • Canvas中的裁剪師講解與實(shí)戰(zhàn)——Android高級(jí)UI(1),Android體系化進(jìn)階學(xué)習(xí)圖譜

    Canvas中的裁剪師講解與實(shí)戰(zhàn)——Android高級(jí)UI(1),Android體系化進(jìn)階學(xué)習(xí)圖譜

    從今天開始我們聊一聊 Canvas 的API,因?yàn)镃anvas的API較多,所以我們分為幾次分享,首先分享的是裁剪類型的API使用。話不多說(shuō),先上實(shí)戰(zhàn)圖。 老夫的少女心 源碼地址文末會(huì)給出,了解原理才能更好地駕馭。 分享前,我們先來(lái)聊聊,在我們生活中如何繪制一張如下的圖。 我們

    2024年04月13日
    瀏覽(41)
  • Android基礎(chǔ)到進(jìn)階UI祖父級(jí) ViewGroup介紹+實(shí)用

    Android基礎(chǔ)到進(jìn)階UI祖父級(jí) ViewGroup介紹+實(shí)用

    int sizeHeight = MeasureSpec.getSize(heightMeasureSpec); int modeWidth = MeasureSpec.getMode(widthMeasureSpec); int modeHeight = MeasureSpec.getMode(heightMeasureSpec); // 如果是warp_content情況下,記錄寬和高 int width = 0; int height = 0; //記錄每一行的寬度,width不斷取最大寬度 int lineWidth = 0; //每一行的高度,累加至h

    2024年04月16日
    瀏覽(19)
  • 【Android Framework系列】第13章 SVG矢量圖形自定義組件(繪制中國(guó)地圖)

    【Android Framework系列】第13章 SVG矢量圖形自定義組件(繪制中國(guó)地圖)

    本章節(jié)我們來(lái)了解下什么是 SVG 矢量圖形,怎么通過(guò) SVG 實(shí)現(xiàn)圖形的繪制,通過(guò) SVG 實(shí)現(xiàn)不規(guī)則的自定義控件,項(xiàng)目實(shí)現(xiàn)一個(gè)中國(guó)地圖,實(shí)現(xiàn)每個(gè)省都能夠點(diǎn)擊,項(xiàng)目地址在文末請(qǐng)自取。 SVG 指可伸縮矢量圖形 (Scalable Vector Graphics) SVG 用來(lái)定義用于網(wǎng)絡(luò)的基于矢量的圖形 SVG 使用

    2024年02月10日
    瀏覽(25)
  • 使用svg在元素直接繪制連線箭頭

    使用svg在元素直接繪制連線箭頭

    注意:svg的圖形繪制的點(diǎn)位置坐標(biāo)是基于畫布的位置坐標(biāo),相當(dāng)于從左上角的點(diǎn)為起點(diǎn)。 先來(lái)個(gè)簡(jiǎn)單示例: 上面示例中可以看到, svg 畫布的位置在哪, path 中點(diǎn)的坐標(biāo)就從哪里開始,默認(rèn)是從瀏覽器可視窗口的左上角開始。那么我們只要知道點(diǎn)的坐標(biāo)就能繪制箭頭了。 接

    2024年02月04日
    瀏覽(19)
  • CSS 使用 SVG 繪制動(dòng)態(tài)皮筋與小球交互動(dòng)畫

    CSS 使用 SVG 繪制動(dòng)態(tài)皮筋與小球交互動(dòng)畫

    使用 animation 控制 SVG 的 path 屬性執(zhí)行動(dòng)畫 使用 CSS 設(shè)置 SVG 部分屬性 實(shí)現(xiàn)上述代碼后,頁(yè)面效果如下: 完成上述代碼后,皮筋就可以開始運(yùn)動(dòng),效果圖如下: 完成上述代碼后就可以完成所有效果。 完整代碼下載

    2024年04月12日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包