这是你可以做的:
在您的活动/片段布局文件中,指定2个ScrollView(例如background_sv和content_sv).
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:id="@+id/background_sv"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:id="@+id/parallax_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="..." />
android:id="@+id/content_sv"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
在背景高度的内容滚动视图中添加虚拟视图并使其透明.现在,将滚动侦听器附加到content_sv.滚动内容滚动视图时,请调用
mBgScrollView.scrollTo(0,(int)(y /*scroll Of content_sv*/ / 2f));
现有的API不支持获取滚动事件.
因此,我们需要创建一个Custom ScrollView来提供ScrollViewListener.
package com.example.parallax;
// imports;
public class MyScrollView extends ScrollView {
public interface ScrollViewListener {
void onScrollChanged(MyScrollView scrollView,int x,int y,int oldx,int oldy);
}
private ScrollViewListener scrollViewListener = null;
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context,AttributeSet attrs,int defStyle) {
super(context,attrs,defStyle);
}
public MyScrollView(Context context,AttributeSet attrs) {
super(context,attrs);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
protected void onScrollChanged(int x,int oldy) {
super.onScrollChanged(x,y,oldx,oldy);
if(scrollViewListener != null) {
scrollViewListener.onScrollChanged(this,x,oldy);
}
}
}
这是托管内容ScrollView和后台ScrollView的活动
package com.example.parallax;
// imports;
public class ParallaxActivity extends Activity implements ScrollViewListener {
private MyScrollView mBgScrollView;
private MyScrollView mContentScrollView;
@Override
public void onCreate(Bundle savedInstanceState) {
mBgScrollView = findViewById(R.id.background_sv);
mContentScrollView = findViewById(R.id.content_sv);
mContentScrollView.setOnScrollListener(this);
}
// this is method for onScrollListener put values according to your need
@Override
public void onScrollChanged(MyScrollView scrollView,int oldy) {
super.onScrollChanged(scrollView,oldy);
// when the content scrollview will scroll by say 100px,// the background scrollview will scroll by 50px. It will
// look like a parallax effect where the background is
// scrolling with a different speed then the content scrollview.
mBgScrollView.scrollTo(0,(int)(y / 2f));
}
}