編輯:關於Android編程
在我們開發android app時,會有很多效果都需要模仿IOS,最近在做一個頁面時,其中用到了 ScrollView,但要做成IOS那種在ScrollView滑動時,浮在ScrollView的功能按鈕要隱藏,當滑動結束後,功能按鈕又要顯示出來。效果如下圖所示:
gif實在是不好搞,所以只能截個靜態圖來表示一下,當ScrollView滑動時,浮在最下面的按鈕會以動畫的形式隱藏,當停止滑動時,又會已動畫的形式回到原位置。
思路:當監聽到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); } } }最後:主要就使用用了一個屬性動畫,屬性動畫還是很重要的,一定的學會並熟練應用。
源碼裡面有3套輸入法,位置:Z:\myandroid\packages\inputmethodsopenwnn是一家日本公司開發的開源輸入法框架,涉及中文、日文、韓文。目
側滑菜單在很多應用中都會見到,最近QQ5.0側滑還玩了點花樣~~對於側滑菜單,一般大家都會自定義ViewGroup,然後隱藏菜單欄,當手指滑動時,通過Scroller或者
在開始講述touch事件流程之前,還簡單介紹下TouchEvent,View和ViewGroup。1. MotionEvent 整個事件分發流程中,會
首先先上一張開發效果圖:效果是模仿微信的發送位置,項目的框架上采用mvp模式,並用了我自己寫的一套lib,地址ndileber首先界面上的開發,我簡單粘貼代碼(笑)act