最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義view利用PathEffect實(shí)現(xiàn)動(dòng)態(tài)效果

 更新時(shí)間:2022年05月11日 09:43:16   作者:計(jì)蒙不吃魚  
這篇文章主要為大家詳細(xì)介紹了Android自定義view利用PathEffect實(shí)現(xiàn)動(dòng)態(tài)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android自定義view利用PathEffect實(shí)現(xiàn)動(dòng)態(tài)效果的具體代碼,供大家參考,具體內(nèi)容如下

前言

在上一篇此類型的文章中是改變偏移量實(shí)現(xiàn)動(dòng)態(tài)效果,借助的方法是drawArc,這篇文章依然是改變偏移量,而借助的是PathEffect的子類。

效果圖:

一、首先介紹下PathEffect的一些子類

  • CornerPathEffect:將Path的各個(gè)連接線段之間的夾角用一種更平滑的方式連接,類似于圓弧與切線的效果。 參數(shù)radius則是指定圓弧的半徑。
  • DashPathEffect:將Path的線段虛線化,intervals為虛線的ON和OFF的數(shù)組,數(shù)組中元素?cái)?shù)目需要 >= 2; 而phase則為繪制時(shí)的偏移量。
  • DiscretePathEffect:打散Path的線段,使得在原來(lái)路徑的基礎(chǔ)上發(fā)生打散效果。 segmentLength指定最大的段長(zhǎng),deviation則為繪制時(shí)的偏離量。
  • PathDashPathEffect:使用Path圖形來(lái)填充當(dāng)前的路徑,shape指的填充圖形,advance是每個(gè)圖形間的間隔, phase為繪制時(shí)的偏移量。,style則是該類自由的枚舉值,有三種情況:ROTATE、MORPH和TRANSLATE。ROTATE情況下:線段連接處的圖形轉(zhuǎn)換以旋轉(zhuǎn)到與下一段移動(dòng)方向相一致的角度進(jìn)行連接。MORPH情況下:圖形會(huì)以發(fā)生拉伸或壓縮等變形的情況與下一段相連接。TRANSLATE情況下:圖形會(huì)以位置平移的方式與下一段相連接。
  • ComposePathEffect:組合效果
  • SumPathEffect:疊加效果,和ComposePathEffect不同,在表現(xiàn)時(shí)會(huì)將兩個(gè)參數(shù)的效果都獨(dú)立的表現(xiàn)出來(lái), 接著將兩個(gè)效果簡(jiǎn)單的重疊在一起顯示出來(lái)

二、看看子類具體的一些代碼

private static void makeEffects(PathEffect[] e, float phase) {
? ? ? ? ? ? e[0] = null; ? ? // 無(wú)效果
? ? ? ? ? ? e[1] = new CornerPathEffect(30);//CornerPathEffect
? ? ? ? ? ? e[2] = new DashPathEffect(new float[] {10, 5, 5, 5}, phase);//DashPathEffect
? ? ? ? ? ? e[3] = new PathDashPathEffect(makePathDash(), 12, phase,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PathDashPathEffect.Style.ROTATE);//PathDashPathEffect
? ? ? ? ? ? e[4] = new ComposePathEffect(e[2], e[1]);//ComposePathEffect
? ? ? ? ? ? e[5] = new ComposePathEffect(e[3], e[1]);//ComposePathEffect
? ? ? ? }

三、案例實(shí)現(xiàn)(CornerPathEffect,PathDashPathEffect,ComposePathEffect)

實(shí)現(xiàn)的效果是上序代碼的e[5],使用CornerPathEffect實(shí)現(xiàn)圓弧效果,而重點(diǎn)是PathDashPathEffect。

PathDashPathEffect里面有幾個(gè)參數(shù):

new PathDashPathEffect(makePathDash(), 12, phase,
? ? ? ? ?PathDashPathEffect.Style.ROTATE);

第一個(gè)參數(shù)為小path圖形,案例中博主畫的是菱形:

private static Path makePathDash() {
? ? ? ? ? ? Path p = new Path();
? ? ? ? ? ? p.moveTo(0, 0);
? ? ? ? ? ? p.lineTo(4, 4);
? ? ? ? ? ? p.lineTo(8, 0);
? ? ? ? ? ? p.lineTo(4, -4);
? ? ? ? ? ? p.moveTo(0, 0);
? ? ? ? ? ? return p;
? ? ? ? }

第二個(gè)參數(shù)為每個(gè)圖形間的間隔。
第三個(gè)參數(shù)為繪制時(shí)的偏離量
第四個(gè)參數(shù)為樣式,博主選擇的是ROTATE情:線段連接處的圖形轉(zhuǎn)換以旋轉(zhuǎn)到與下一段移動(dòng)方向相一致的角度進(jìn)行連接。

最后使用ComposePathEffect進(jìn)行組合。

繪制運(yùn)動(dòng)路徑

private static Path makeFollowPath() {
? ? ? ? ? ? Path p = new Path();
? ? ? ? ? ? p.moveTo(0, 0);
? ? ? ? ? ? p.lineTo(400,0);
? ? ? ? ? ? p.lineTo(400,400);
? ? ? ? ? ? p.lineTo(0,400);
? ? ? ? ? ? p.lineTo(0,0);
? ? ? ? ? ? return p;
? ? ? ? }

修改偏移量實(shí)現(xiàn)動(dòng)態(tài)效果

mPhase += 1;
invalidate();

四、源碼

public class SampleView extends View {
? ? ? ? private Paint mPaint;
? ? ? ? private Path mPath;
? ? ? ? private PathEffect[] mEffects;
? ? ? ? private int mColors;
? ? ? ? private float mPhase;


? ? ? ? private static void makeEffects(PathEffect[] e, float phase) {
? ? ? ? ? ? e[0] = null; ? ??
? ? ? ? ? ? e[1] = new CornerPathEffect(30);
? ? ? ? ? ? e[2] = new DashPathEffect(new float[] {10, 5, 5, 5}, phase);
? ? ? ? ? ? e[3] = new PathDashPathEffect(makePathDash(), 12, phase,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PathDashPathEffect.Style.ROTATE);
? ? ? ? ? ? e[4] = new SumPathEffect(e[3], e[1]);
? ? ? ? ? ? e[5] = new ComposePathEffect(e[3], e[1]);
? ? ? ? }

? ? ? ? public SampleView(Context context) {
? ? ? ? ? ? super(context);
? ? ? ? ? ? setFocusable(true);
? ? ? ? ? ? setFocusableInTouchMode(true);
? ? ? ? ? ? mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
? ? ? ? ? ? mPaint.setStyle(Paint.Style.STROKE);
? ? ? ? ? ? mPaint.setStrokeWidth(6);
? ? ? ? ? ? mPath = makeFollowPath();
? ? ? ? ? ? //初始化PathEffect[]
? ? ? ? ? ? mEffects = new PathEffect[6];
? ? ? ? ? ? mColors = Color.BLACK;
? ? ? ? }

? ? ? ? @Override
? ? ? ? protected void onDraw(Canvas canvas) {
? ? ? ? ? ? canvas.drawColor(Color.WHITE);

? ? ? ? ? ? RectF bounds = new RectF();
? ? ? ? ? ? mPath.computeBounds(bounds, false);
? ? ? ? ? ? canvas.translate(10 - bounds.left, 10 - bounds.top);

? ? ? ? ? ? makeEffects(mEffects, mPhase);
? ? ? ? ? ? mPhase += 1;
? ? ? ? ? ? invalidate();

? ? ? ? ? ? //選擇樣式
? ? ? ? ? ? mPaint.setPathEffect(mEffects[5]);
? ? ? ? ? ? mPaint.setColor(mColors);
? ? ? ? ? ? canvas.drawPath(mPath, mPaint);
? ? ? ? ? ? canvas.translate(0, 28);

? ? ? ? }

? ? ? ? @Override
? ? ? ? public boolean onKeyDown(int keyCode, KeyEvent event) {
? ? ? ? ? ? switch (keyCode) {
? ? ? ? ? ? ? ? case KeyEvent.KEYCODE_DPAD_CENTER:
? ? ? ? ? ? ? ? ? ? mPath = makeFollowPath();
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }
? ? ? ? ? ? return super.onKeyDown(keyCode, event);
? ? ? ? }
? ? ? ? //繪制跑動(dòng)路徑
? ? ? ? private static Path makeFollowPath() {
? ? ? ? ? ? Path p = new Path();
? ? ? ? ? ? p.moveTo(0, 0);
? ? ? ? ? ? p.lineTo(400,0);
? ? ? ? ? ? p.lineTo(400,400);
? ? ? ? ? ? p.lineTo(0,400);
? ? ? ? ? ? p.lineTo(0,0);
? ? ? ? ? ? return p;
? ? ? ? }
? ? ? ? //繪制跑動(dòng)的小圖標(biāo)
? ? ? ? private static Path makePathDash() {
? ? ? ? ? ? Path p = new Path();
? ? ? ? ? ? p.moveTo(0, 0);
? ? ? ? ? ? p.lineTo(4, 4);
? ? ? ? ? ? p.lineTo(8, 0);
? ? ? ? ? ? p.lineTo(4, -4);
? ? ? ? ? ? p.moveTo(0, 0);
? ? ? ? ? ? return p;
? ? ? ? }
? ? }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android 有阻尼下拉刷新列表的實(shí)現(xiàn)方法

    android 有阻尼下拉刷新列表的實(shí)現(xiàn)方法

    下面小編就為大家分享一篇android 有阻尼下拉刷新列表的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Android編程使用自定義shape實(shí)現(xiàn)shadow陰影效果的方法

    Android編程使用自定義shape實(shí)現(xiàn)shadow陰影效果的方法

    這篇文章主要介紹了Android編程使用自定義shape實(shí)現(xiàn)shadow陰影效果的方法,涉及Android中xml文件布局的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • Android中SurfaceView和view畫出觸摸軌跡

    Android中SurfaceView和view畫出觸摸軌跡

    這篇文章主要介紹了Android中SurfaceView和view畫出觸摸軌跡的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Github簡(jiǎn)單易用的?Android?ViewModel?Retrofit框架

    Github簡(jiǎn)單易用的?Android?ViewModel?Retrofit框架

    這篇文章主要介紹了Github簡(jiǎn)單易用的Android?ViewModel?Retrofit框架,RequestViewMode有自動(dòng)對(duì)LiveData進(jìn)行緩存管理,每個(gè)retrofit api接口復(fù)用一個(gè)livedata的優(yōu)勢(shì)。下文具體詳情,感興趣的小伙伴可以參考一下
    2022-06-06
  • 一文吃透Hilt自定義與跨壁壘

    一文吃透Hilt自定義與跨壁壘

    這篇文章主要介紹了Hilt自定義與跨壁壘的實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Andriod使用多線程實(shí)現(xiàn)輪播圖片

    Andriod使用多線程實(shí)現(xiàn)輪播圖片

    這篇文章主要介紹了Andriod使用多線程實(shí)現(xiàn)輪播圖片效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-10-10
  • Android升級(jí)支持庫(kù)版本遇到的兩個(gè)問(wèn)題詳解

    Android升級(jí)支持庫(kù)版本遇到的兩個(gè)問(wèn)題詳解

    安卓平臺(tái)其中一個(gè)很牛逼的地方在于它支持各種不同的設(shè)備。從你的平板電腦,到你的手機(jī),電視等,安卓無(wú)處不在。這篇文章主要給大家介紹了關(guān)于Android升級(jí)支持庫(kù)版本遇到的兩個(gè)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • 一文帶你徹底搞懂Behavior實(shí)現(xiàn)復(fù)雜的視覺(jué)聯(lián)動(dòng)效果原理

    一文帶你徹底搞懂Behavior實(shí)現(xiàn)復(fù)雜的視覺(jué)聯(lián)動(dòng)效果原理

    這篇文章主要為大家介紹了一文帶你徹底搞懂Behavior實(shí)現(xiàn)復(fù)雜的視覺(jué)聯(lián)動(dòng)效果原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Android保存聯(lián)系人到通訊錄的方法

    Android保存聯(lián)系人到通訊錄的方法

    怎么保存聯(lián)系人數(shù)據(jù)到本機(jī)通訊錄?這篇文章主要為大家詳細(xì)介紹了Android保存聯(lián)系人到通訊錄的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android上使用ZXing識(shí)別條形碼與二維碼的方法

    Android上使用ZXing識(shí)別條形碼與二維碼的方法

    這篇文章主要介紹了Android上使用ZXing識(shí)別條形碼與二維碼的方法,需要的朋友可以參考下
    2014-08-08

最新評(píng)論

东城区| 神池县| 晋江市| 万全县| 呼玛县| 镇坪县| 遂溪县| 云林县| 平阴县| 东阿县| 江孜县| 黑龙江省| 彰武县| 华容县| 星座| 邵阳县| 道真| 朝阳区| 广安市| 宣城市| 阿尔山市| 沛县| 浙江省| 巴塘县| 德兴市| 老河口市| 奉贤区| 罗源县| 钟山县| 潢川县| 梓潼县| 贵南县| 阜康市| 永平县| 清镇市| 贵定县| 农安县| 德安县| 营山县| 德阳市| 五莲县|