如何實現系統自帶下拉刷動畫效果?

2021-07-02 03:14:31 字數 3988 閱讀 1355

剛開始看確實感覺很不習慣,看久了,就覺得還不錯!所以就想引用到自己的專案中;

接下來就找到原始碼看看他是如何運用的,首先找到swiperefreshlayout,因為這個類是android自帶的下拉重新整理實現類,相應的動畫也肯定在裡面有用到。

可以找到裡面用到了兩個類materialprogressdrawable 和 circleimageview,這兩個類就是我們所看到的載入動畫的實現類!

但是這兩個類外界不可呼叫,為什麼不可呼叫呢?開啟原始碼

/**

* *@hide

*/class circleimageview extends imageview

//....

}

/**

* fancy progress indicator for material theme.

* *@hide

*/class

materialprogressdrawable

extends

drawable

implements

animatable )

public @inte***ce

progressdrawablesize {}

// maps to progressbar.large style

static

final int large = 0;

// maps to progressbar default style

static

final int default = 1;

//...

}

兩個類都宣告為保護的,所以我們無法直接呼叫,不過居然我們有原始碼,我們就能複製乙份出來!

接下來,我們就來使用他們

這個相信都難不到大家,因為系統已經有使用的例子了。

/**

* created by moon.zhong on 2015/4/20.

*/public

class

loadingview

extends

relativelayout

public

loadingview(context context, attributeset attrs)

public

loadingview(context context, attributeset attrs, int defstyleattr)

@targetapi(build.version_codes.lollipop)

public

loadingview(context context, attributeset attrs, int defstyleattr, int defstyleres)

private

void

initview(context context)

/*建立動畫view*/

private

void

createprogressview()

/*這個是動態改變動畫的效果*/

public

void

setscale(float scale)

/*這裡暫時沒用到*/

public

void

onrefresh(float scale)

/*這裡暫時沒用到*/

public

void

stoprefresh()

/*開始執行動畫效果*/

public

void

startanimation()

/*結束知心動畫效果*/

public

void

stopanimation()

private animation.animationlistener mrefreshlistener = new animation.animationlistener()

@override

public

void

onanimationrepeat(animation animation)

@override

public

void

onanimationend(animation animation) else

mcurrenttargetoffsettop = mcircleview.gettop();}};

private

void

startscaleupanimation(animation.animationlistener listener)

};if (listener != null)

mscaleanimation.setduration(mmediumanimationduration);

mcircleview.clearanimation();

mcircleview.startanimation(mscaleanimation);

}private

void

startscaledownanimation(animation.animationlistener listener)

};mscaledownanimation.setduration(150);

mcircleview.setanimationlistener(listener);

mcircleview.clearanimation();

mcircleview.startanimation(mscaledownanimation);

}private

void

animateoffsettocorrectposition(int from, animation.animationlistener listener)

mcircleview.clearanimation();

mcircleview.startanimation(manimatetocorrectposition);

}/*當view設為可見的時候,動畫開始執行,反之動畫停止*/

@override

public

void

setvisibility(int visibility) else

super.setvisibility(visibility);

}private

final animation manimatetocorrectposition = new animation()

};/**

*@param progress

*/private

void

setanimationprogress(float progress)

private

void

settargetoffsettopandbottom(int offset)

@override

protected

void

onlayout(boolean changed, int l, int t, int r, int b)

@override

protected

void

onmeasure(int widthmeasurespec, int heightmeasurespec)

}

xml 引用

xml呼叫

.loadingview

android:layout_width="60dp"

android:layout_height="60dp"

android:layout_centerinparent="true"

>

.loadingview>

android系統自帶下拉重新整理控制項的實現

android系統自帶的下拉重新整理控制項swiperefreshlayout位於android.support.v4.widget包下,實現步驟如下 1.在布局檔案中新增該控制項,該控制項一般作為父控制項,而且只能包含有乙個子控制項,並且這個子控制項是能夠滑動的,比如scrollview,list...

微信小程式仿系統自帶下拉重新整理效果

接下來就是直接看 了 首先是布局檔案 wxml布局檔案 height 100 scroll y bindscroll scorll column bindtouchstart start bindtouchend end bindtouchmove move 去掉原來的重新整理view height...

ios程式如何實現系統自帶的分享

首先,需要匯入系統自帶的框架 import return 2.建立分享的控制器 slcomposeviewcontroller composevc slcomposeviewcontroller composeviewcontrollerforservicetype slservicetypesin...