編輯:關於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);
}
}
}
最後:主要就使用用了一個屬性動畫,屬性動畫還是很重要的,一定的學會並熟練應用。
Android系統應用開發(五)android 輸入法類說明
源碼裡面有3套輸入法,位置:Z:\myandroid\packages\inputmethodsopenwnn是一家日本公司開發的開源輸入法框架,涉及中文、日文、韓文。目
Android使用自定義控件HorizontalScrollView打造史上最簡單的側滑菜單
側滑菜單在很多應用中都會見到,最近QQ5.0側滑還玩了點花樣~~對於側滑菜單,一般大家都會自定義ViewGroup,然後隱藏菜單欄,當手指滑動時,通過Scroller或者
Android事件分發機制詳解
在開始講述touch事件流程之前,還簡單介紹下TouchEvent,View和ViewGroup。1. MotionEvent 整個事件分發流程中,會
android開發:仿照微信 發送本人位置(基於百度地圖)(前篇)
首先先上一張開發效果圖:效果是模仿微信的發送位置,項目的框架上采用mvp模式,並用了我自己寫的一套lib,地址ndileber首先界面上的開發,我簡單粘貼代碼(笑)act