专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
开发者全社区  ·  小仙女逼婚失败...称遇假A8.5 ·  昨天  
开发者全社区  ·  大专生的PDF ·  昨天  
开发者全社区  ·  清华附的少爷 ·  2 天前  
开发者全社区  ·  跟师兄表白被拒绝了 ·  2 天前  
开发者全社区  ·  春晚差点穿帮的镜头 ·  3 天前  
51好读  ›  专栏  ›  安卓开发精选

Android 自定义View UC下拉刷新效果(三)下

安卓开发精选  · 公众号  · android  · 2016-11-19 21:46

正文

(点击 上方公众号 ,可快速关注)


来源:伯乐在线专栏作者 - joe

链接:http://android.jobbole.com/85137/

点击 → 了解如何加入专栏作者


上文


拖拽背景渐变效果


说到背景的渐变效果,那么肯定就是要讲相关的回调了!Callbacks用来处理对应的回调,提供了三个方法:onSheetNarrowed(),onSheetExpanded(),onSheetPositionChanged(),分别对应的时候关闭了,展开了,和改变了三种情况。


在onSheetPositionChanged(int sheetTop, float currentX, int dy, boolean userInteracted)的方法中,有四个参数,分别是当前的top值,当前touch的x值,竖直方向的改变值,以及是否是由开到关或者由关到开的情况。


public static abstract class Callbacks {

public void onSheetNarrowed () {

}

public void onSheetExpanded () {

}

public void onSheetPositionChanged ( int sheetTop , float currentX , int dy , boolean userInteracted ) {

}

}

public void registerCallback ( Callbacks callback ) {

if ( callbacks == null ) {

callbacks = new CopyOnWriteArrayList ();

}

callbacks . add ( callback );

}

public void unregisterCallback ( Callbacks callback ) {

if ( callbacks != null && ! callbacks . isEmpty ()) {

callbacks . remove ( callback );

}

}


在具体是实现中是这样的:


mBoottom . registerCallback ( new CurveLayout . Callbacks () {

private int dy ;

@ Override

public void onSheetExpanded () {

Log . e ( TAG , "onSheetExpanded: " );

mCurveView . onDispatchUp ();

mCurveView . setTranslationY ( 0 );

mCurveView . setVisibility ( View . GONE );

mTab . setTranslationY ( - mCurveView . getHeight ());

mTab . setVisibility ( View . VISIBLE );

mCurveView . setScaleX ( 1.f );

mCurveView . setScaleY ( 1.f );

mViewPager . setScrollable ( true );

dy = 0 ;

}

@ Override

public void onSheetNarrowed () {

Log . e ( TAG , "onSheetNarrowed: " );

mCurveView . onDispatchUp ();

mCurveView . setTranslationY ( 0 );

mCurveView . setScaleX ( 1.f );

mCurveView . setScaleY ( 1.f );

mTab . setVisibility ( View . GONE );

mViewPager . setScrollable ( false );

mCurveView . setVisibility ( View . VISIBLE );

dy = 0 ;

}

@ Override

public void onSheetPositionChanged ( int sheetTop , float currentX , int ddy , boolean reverse ) {

if ( mCurveViewHeight == 0 ) {

mCurveViewHeight = mCurveView . getHeight ();

mBoottom . setDismissOffset ( mCurveViewHeight );

}

this . dy += ddy ;

float fraction = 1 - sheetTop * 1.0f / mCurveViewHeight ;

if ( ! reverse ) {

if ( fraction >= 0 && ! mBoottom . isExpanded ()) { //向上拉

mTab . setVisibility ( View . VISIBLE );

mBoottom . setExpandTopOffset ( mTab . getHeight ());

mCurveView . setTranslationY ( dy * 0.2f );

mTab . setTranslationY ( - fraction * ( mCurveView . getHeight ()







请到「今天看啥」查看全文


推荐文章
开发者全社区  ·  小仙女逼婚失败...称遇假A8.5
昨天
开发者全社区  ·  大专生的PDF
昨天
开发者全社区  ·  清华附的少爷
2 天前
开发者全社区  ·  跟师兄表白被拒绝了
2 天前
开发者全社区  ·  春晚差点穿帮的镜头
3 天前