『壹』 android 4.0.3 版本怎麼關閉淡入淡出的動畫效果啊
手機設置 聲音和顯示 把動畫效果關了就ok了
『貳』 android如何自定義Toast動畫
自定義toast動畫其實是view的動畫
1、構建view,替代系統的toast的view。
2、設置view的相關動畫,適當的時機啟動動畫。(在show之後)
『叄』 Android怎樣為ToolBar上的Item添加動畫效果
效果一:使Toolbar隨著內容區域的滾動而隱藏和顯示
我們知道手機屏幕的大小時候限的,有時候我們為了顯示更多的內容需要隱藏掉一些不相關的內容,比如Toolbar。以前我們可能會使用屬性動畫或者通過view.animate().translationXX()這個便捷的方法來實現這些效果。現在就不用這么麻煩了,只需要在xml中添加兩行代碼就可以了。
為了實現上述的效果,這里需要引入兩個新的控制項:CoordinatorLayout和AppBarLayout,這兩個控制項均位於design兼容包中。所以你需要在mole的build.gradle依賴中加入下面一行代碼。
compile 'com.android.support:design:23.1.0'
AppBarLayout:本質上是一個垂直的線性布局。但是他實現了材料設計中app bar的滾動手勢的特性。而為了讓這些特性發揮效果,你必須把AppBarLayout作為CoordinatorLayout的一個直接子控制項來使用。並且,你還需要為AppBarLayout設置一個支持NestedScroll的兄弟控制項。這樣父控制項CoordinateLayout就知道什麼時候來響應滾動事件了 它的子控制項可以通過setScrollFlags(int)或者app:layout_scrollFlags的方式來為自己指定滾動行為。可選的行為有:SCROLL_FLAG_ENTER_ALWAYS、SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED、SCROLL_FLAG_EXIT_UNTIL_COLLAPSED、SCROLL_FLAG_SCROLL、SCROLL_FLAG_SNAP。
CoordinateLayout:本質上是一個增強版的FrameLayout。一般作為一個容器來使用,這樣可以讓它的子控制項實現一些交互效果。可以通過給子控制項指定不同的Behaviors來實現不同的交互效果。
扯了這么多好像也沒啥感覺,感覺還真是「Talk is cheap. Show me the code.」呢。那下來就擼代碼,看效果吧。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.demo.activity.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
上面的布局中有兩個地方需要注意:1.Toolbar的app:layout_scrollFlags="scroll|enterAlways"屬性 2.RecyclerView的app:layout_behavior="@string/appbar_scrolling_view_behavior"屬性。這兩個地方就是上文中加粗部分的提到的注意點。同時,注意下整個布局的結構:CoordinateLayout作為跟布局,內部分別放置了一個AppBarLayout和RecyclerView。Toolbar作為AppBarLayout的子控制項而存在。
其實,就改這么點地方就可以了。想要的效果已經有了。
『肆』 android - 使用向上/向下滑動動畫顯示和隱藏視圖
MainActivity.java
activity_mail.xml
『伍』 android View設置隱藏動畫問題
mAppHiddenAction.setDuration(400);
mAppGridView.startAnimation(mHiddenAction);
scrollView.startAnimation(mAppHiddenAction);
relativelayout.startAnimation(mAppHiddenAction);
後面這些代碼應該在mAppHiddenAction結束後再執行,而不是直接在這就執行,你可用hander+定時器延後執行即可
scrollView.setVisibility(View.GONE);
mAppGridView.setVisibility(View.GONE);
tv.setVisibility(View.GONE);
btn_save.setVisibility(View.GONE);
『陸』 android 向上滑動srcollview 怎麼隱藏viewpager裡面的布局
借用兩個庫來快速完成
1. ViewPagerIndicator
2. ObservableScrollView
將兩個庫引入項目中去,快速的搭建一個ViewPager框架後,在ViewPager每頁對應的Fragment的布局中增加一個ListView,這個ListView使用ObservableScrollView庫中的ListView
主布局代碼,使用線性布局,上方放置indicator,下方放置ViewPager
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/indicator"
android:layout_width="fill_parent"
android:layout_height="50dp" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
-Fragment代碼,放置一個ObservableListView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >
<cn.e.zafu.view.observableview.ObservableListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
業務邏輯代碼
在Activity中初始化indicator和viewpager,然後再fragment中處理viewpager中內容即listview手勢上下滑動與indicator的聯動。在onCreateView中管理indicator,並獲取其高度
indicator = (TabPageIndicator) getActivity().findViewById(indicatorId);
//獲得indicator高度
indicator.post(new Runnable() {
@Override
public void run() {
height=indicator.getHeight();
Log.d("TAG", "height:"+height);
}
});
關聯listview並設置監聽器
listView = (ObservableListView) view.findViewById(R.id.list);
listView.setScrollViewCallbacks(this);
fragment實現對應的介面
implements ObservableScrollViewCallbacks
實現的方法如下
@Override
public void onScrollChanged(int scrollY, boolean firstScroll,
boolean dragging) {
}
@Override
public void onDownMotionEvent() {
}
@Override
public void onUpOrCancelMotionEvent(ScrollState scrollState) {
}
在onUpOrCancelMotionEvent方法中完成顯示和隱藏indicator
//獲得高度的另一種方法
/*if(height==0){
height=indicator.getHeight();
Log.d("TAG", "height:"+height);
}*/
//如果手勢向上則隱藏,手勢向下則顯示
if (scrollState == ScrollState.UP) {
//如果顯示的並且動畫沒有在進行,則隱藏
if (isIndicatorShow&&!isShowing) {
hideIndicator();
}
} else if (scrollState == ScrollState.DOWN) {
//如果沒顯示的並且動畫沒有在進行,則顯示
if (!isIndicatorShow&&!isShowing) {
showIndicator();
}
}
完成顯示和隱藏的函數,使用屬性動畫完成一個過渡效果
public void showIndicator() {
//屬性動畫translationY
ObjectAnimator animator = ObjectAnimator.ofFloat(indicator, "translationY",
0f);
//持續時間
animator.setDuration(500);
//插值器,減速
animator.setInterpolator(new DecelerateInterpolator(2));
//監聽器
animator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//不斷增加indicator所在viewgroup的高度
LayoutParams layoutParams = indicator.getLayoutParams();
float v=(Float) animation.getAnimatedValue();
Log.d("TAG","show:"+v);
layoutParams.height=height+(int)v;
//重新布局
indicator.requestLayout();
}
});
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
//動畫開始後設置為true
isShowing=true;
super.onAnimationStart(animation);
}
@Override
public void onAnimationEnd(Animator animation) {
//動畫結束後設置為false
isShowing=false;
//顯示後設置為已顯示
isIndicatorShow = true;
super.onAnimationEnd(animation);
}
});
//開始動畫
animator.start();
}
public void hideIndicator() {
ObjectAnimator animator = ObjectAnimator.ofFloat(indicator, "translationY",-height);
animator.setDuration(500);
//加速插值器
animator.setInterpolator(new AccelerateInterpolator(2));
animator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//不斷減小indicator所在viewgroup的高度
LayoutParams layoutParams = indicator.getLayoutParams();
float v=(Float) animation.getAnimatedValue();
Log.d("TAG","hide:"+v);
layoutParams.height=height+(int)v;
indicator.requestLayout();
}
});
//同顯示
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
isShowing=true;
super.onAnimationStart(animation);
}
@Override
public void onAnimationEnd(Animator animation) {
isShowing=false;
isIndicatorShow = false;
super.onAnimationEnd(animation);
}
});
animator.start();
}
所有用到的變數
private View view = null;//存儲fragemnt的視圖
private TabPageIndicator indicator = null;//indicator
private ObservableListView listView = null;//listview
private int indicatorId;//indicator對應的id值
private int height=0;//indicator高低
private boolean isIndicatorShow = true;//是否顯示
private boolean isShowing=false;//動畫是否正在進行