這里主要的兩個(gè)控件就是 Linelayout(包裹的是搜索框部分) Scrollview(包裹的滑動(dòng)整體頁面)
提醒(一定要用RelativeLayout布局)
設(shè)置控件在布局最上邊line.bringToFront();//相當(dāng)于改變Z軸
好了直接上代碼
第一步:定義控件
public class ObservableScrollView extends ScrollView {
public interface ScrollViewListener {
void onScrollChanged(ObservableScrollView scrollView, int x, int y,
int oldx, int oldy);
}
private ScrollViewListener scrollViewListener = null;
public ObservableScrollView(Context context) {
super(context);
}
public ObservableScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if (scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
}
定義控件添加監(jiān)聽方法
第二步:布局
<linearlayout android:id="@+id/line" android:layout_height="100dp" android:layout_width="match_parent" android:orientation="horizontal"> </linearlayout> <com.example.dell.myapplication.observablescrollview android:id="@+id/scrollView" android:layout_height="495dp" android:layout_width="368dp" tools:layout_editor_absolutex="8dp" tools:layout_editor_absolutey="8dp"> <linearlayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical"> </linearlayout> </com.example.dell.myapplication.observablescrollview>
scrollview默認(rèn)只有一個(gè)子空間,所以要添加一個(gè)布局進(jìn)行包裹,內(nèi)容自己加
第三步:Activity.class
public class MainActivity extends AppCompatActivity {
private LinearLayout line;
private ObservableScrollView scrollView;
private int imageHeight=300; //設(shè)置漸變高度,一般為導(dǎo)航圖片高度,自己控制
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查找控件
line= (LinearLayout) findViewById(R.id.line);
scrollView= (ObservableScrollView) findViewById(R.id.scrollView);
//搜索框在布局最上面
line.bringToFront();
//滑動(dòng)監(jiān)聽
scrollView.setScrollViewListener(new ObservableScrollView.ScrollViewListener() {
@Override
public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {
if (y <= 0) {
line.setBackgroundColor(Color.argb((int) 0, 227, 29, 26));//AGB由相關(guān)工具獲得,或者美工提供
} else if (y > 0 && y <= imageHeight) {
float scale = (float) y / imageHeight;
float alpha = (255 * scale);
// 只是layout背景透明
line.setBackgroundColor(Color.argb((int) alpha, 227, 29, 26));
} else {
line.setBackgroundColor(Color.argb((int) 255, 227, 29, 26));
}
}
});
}