1. 设置 actionbar 悬浮于 view 之上。
<style name="MyTheme.OverlayActionBar" parent="AppTheme">
<item name="windowActionBarOverlay">true</item>
</style>
2. 设置滑动监听。
- API 23 以上才有 setOnScrollChangeListener()。
所以需要自己写一个滑动监听。
1. 创建一个 ScrollView 等的子类。
2. 在其中创建一个 MyOnScrollChangedListener 接口,接口包含 myOnScrollChanged() 方法。
3. 创建 setMyOnScrollChangedListener() 方法,参数为一个 MyOnScrollChangedListener 对象 listener。
4. 复写父类的 onScrollChanged() 方法,在其中让 listener 回调 myOnScrollChanged() 方法。
5 使用时,在 myOnScrollChanged() 里写具体滑动事件。
MyScrollView:
package com.ttt.zhihudaily.util;
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
import android.widget.ScrollView;
public class MyScrollView extends ScrollView{
private MyOnScrollChangedListener listener;
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
* public interface MyOnScrollChangedListener{
* void myOnScrollChanged(int scrollX, int scrollY, int oldScrollX, int oldScrollY);
* }
* public void setMyOnScrollChangedListener(MyOnScrollChangedListener listener){
* this.listener=listener;
}
@Override
protected void onScrollChanged(int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
super.onScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY);
* listener.myOnScrollChanged(scrollX,scrollY,oldScrollX,oldScrollY);
}
}
3. 给 actionbar 设置背景,在滑动监听里改变背景透明度。
actionBar=getSupportActionBar();
colorDrawable=new ColorDrawable(getResources().getColor(R.color.actionBarColor));
actionBar.setBackgroundDrawable(colorDrawable);
......
myScrollView =(MyScrollView)findViewById(R.id.my_scroll_view);
myScrollView.setMyOnScrollChangedListener(new MyScrollView.MyOnScrollChangedListener() {
@Override
public void myOnScrollChanged(int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if(scrollY<500){
float alpha=(float) (500-scrollY)/500;
colorDrawable.setAlpha((int)(alpha*255));
}else {
colorDrawable.setAlpha(0);
}
});
网友评论