剛開始看確實感覺很不習慣,看久了,就覺得還不錯!所以就想引用到自己的專案中;
接下來就找到原始碼看看他是如何運用的,首先找到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...