当前位置:   article > 正文

android仿ios滑动按钮,android仿IOS,滑动隐藏底部ScrollView(示例代码)

android customscrollview

在我们开发android app时,会有非常多效果都须要模仿IOS,近期在做一个页面时,当中用到了 ScrollView,但要做成IOS那种在ScrollView滑动时。浮在ScrollView的功能button要隐藏,当滑动结束后,功能button又要显示出来。效果例如以下图所看到的:

315b6553450c7a0ae05a62fc9e69d187.pnggif实在是不好搞,所以仅仅能截个静态图来表示一下,当ScrollView滑动时。浮在最以下的button会以动画的形式隐藏。当停止滑动时,又会已动画的形式回到原位置。

思路:当监听到ScrollView滑动时,播放属性动画隐藏。当滑动结束的时候播放相反的动画。使View回到原位置。

代码例如以下:package view;

/**********************************************************

* @文件名:CustomScrollView.java

* @文件作者:rzq

* @创建时间:2015年7月7日 下午2:20:16

* @文件描写叙述:滑动隐藏ScrollView

* @改动历史:2015年7月7日创建初始版本号

**********************************************************/

public class CustomScrollView extends ScrollView

{

/**

* UI

*/

private View contentView;

/**

* data

*/

private ValueAnimator apperaAnim;

private ValueAnimator hiddenAnim;

private int downScrollY;

private int moveScrollY;

private boolean isHidding;

public CustomScrollView(Context context, AttributeSet attrs)

{

super(context, attrs);

}

@Override

protected void onFinishInflate()

{

if (getChildCount() > 0)

{

contentView = getChildAt(0);

}

}

@Override

public boolean onTouchEvent(MotionEvent ev)

{

switch (ev.getAction())

{

case MotionEvent.ACTION_DOWN:

downScrollY = getScrollY();

break;

case MotionEvent.ACTION_MOVE:

moveScrollY = getScrollY();

if (moveScrollY != downScrollY)

{

startHiddenAnimation();

}

break;

case MotionEvent.ACTION_UP:

case MotionEvent.ACTION_CANCEL:

moveScrollY = 0;

downScrollY = 0;

break;

}

return super.onTouchEvent(ev);

}

public void setAnimationView(final View animationView)

{

/**

* 创建动画

*/

hiddenAnim = ValueAnimator.ofFloat(0, animationView.getHeight());

hiddenAnim.setDuration(500);

hiddenAnim.setTarget(animationView);

hiddenAnim.addUpdateListener(new AnimatorUpdateListener()

{

@Override

public void onAnimationUpdate(ValueAnimator animation)

{

animationView.setTranslationY((Float) animation.getAnimatedValue());

}

});

hiddenAnim.addListener(new AnimatorListenerAdapter()

{

@Override

public void onAnimationEnd(Animator animation)

{

startApperaAnimation();

}

@Override

public void onAnimationStart(Animator animation)

{

isHidding = true;

}

});

apperaAnim = ValueAnimator.ofFloat(animationView.getHeight(), 0);

apperaAnim.setDuration(500);

apperaAnim.setTarget(animationView);

apperaAnim.addUpdateListener(new AnimatorUpdateListener()

{

@Override

public void onAnimationUpdate(ValueAnimator animation)

{

animationView.setTranslationY((Float) animation.getAnimatedValue());

}

});

apperaAnim.addListener(new AnimatorListenerAdapter()

{

@Override

public void onAnimationEnd(Animator animation)

{

isHidding = false;

}

@Override

public void onAnimationStart(Animator animation)

{

}

});

}

private void startHiddenAnimation()

{

if (!hiddenAnim.isRunning() && !isHidding)

{

hiddenAnim.start();

}

}

private void startApperaAnimation()

{

if (!apperaAnim.isRunning())

{

apperaAnim.start();

}

}

/**

* 是否直接滑动究竟部

*/

protected boolean isScrollDown()

{

return getHeight() + getScrollY() == contentView.getHeight();

}

/**

* 是否直接滑到顶部

*/

protected boolean isScrollUp()

{

return getScrollY() == 0;

}

}

/**

* 在Activity中使用

*/

public class CustomActivity extends Activity

{

private TextView textView;

private CustomScrollView2 scrollView;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.custom_scrollview_layout);

scrollView = (CustomScrollView2) findViewById(R.id.scoll_view);

textView = (TextView) findViewById(R.id.animation_view);

}

@Override

public void onWindowFocusChanged(boolean hasFocus)

{

super.onWindowFocusChanged(hasFocus);

if (hasFocus)

{

scrollView.setAnimationView(textView);

}

}

}        最后:主要就使用用了一个属性动画。属性动画还是非常重要的,一定的学会并熟练应用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/93638
推荐阅读
相关标签
  

闽ICP备14008679号