话不多说直接上代码:
package t.s.com.wogdet;
import android.content.Context;
import android.support.v4.widget.NestedScrollView;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
/**
* Created by lyj on 2017/8/14.
*/
public class MyScroview extends NestedScrollView {
private OnScrollListener onScrollListener;
/**
* 主要是用在用户手指离开MyScrollView,MyScrollView还在继续滑动,我们用来保存Y的距离,然后做比较
*/
private int lastScrollY;
private int downX;
private int downY;
private int mTouchSlop;
public MyScroview(Context context) {
super(context, null);
}
public MyScroview(Context context, AttributeSet attrs) {
super(context, attrs, 0);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
public MyScroview(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
/**
* 设置滚动接口
*
* @param onScrollListener
*/
public void setOnScrollListener(OnScrollListener onScrollListener) {
this.onScrollListener = onScrollListener;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if (onScrollListener != null) {
onScrollListener.onScroll(y);
}
}
/**
* 滚动的回调接口
*/
public interface OnScrollListener {
/**
* 回调方法, 返回MyScrollView滑动的Y方向距离
*/
public void onScroll(int scrollY);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downX = (int) e.getRawX();
downY = (int) e.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int moveY = (int) e.getRawY();
if (Math.abs(moveY - downY) > mTouchSlop) {
return true;
}
}
return super.onInterceptTouchEvent(e);
}
}
重写了NestedScrollView设置了滚动回调接口,然后看用法
首先看布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:clipToPadding="true"
android:fitsSystemWindows="true">
<!--自定义的头部-->
<include layout="@layout/main_search" />
<t.s.com.wogdet.MyScroview
android:id="@+id/myscroview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/main_search"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F5F5F5"
android:orientation="vertical"
android:paddingBottom="30px">
<!--悬浮栏以上的部分-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="300px"
android:background="#ffffff">
<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
<include layout="@layout/mian_top_item" />
<LinearLayout
android:id="@+id/main_tab2"
android:layout_width="match_parent"
android:layout_height="120px"
android:background="#ffffff"
android:orientation="vertical">
<include layout="@layout/team_tab_detail" />
</LinearLayout>
<!--悬浮栏以下的部分-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30px"
android:background="#ffffff"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="42px">
<TextView
android:layout_width="8px"
android:layout_height="49px"
android:background="#59C2DE" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30px"
android:text="安全须知"
android:textColor="#333333"
android:textSize="40px" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/text"
android:textColor="#333333" />
</LinearLayout>
</t.s.com.wogdet.MyScroview>
<LinearLayout
android:id="@+id/main_tab1"
android:layout_width="match_parent"
android:layout_height="120px"
android:layout_below="@+id/main_search"
android:orientation="vertical"></LinearLayout>
</RelativeLayout>
然后是Activity
package t.s.com.desgin;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.Transformer;
import com.youth.banner.listener.OnBannerListener;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.OnClick;
import t.s.com.R;
import t.s.com.wogdet.MyScroview;
public class ScrollviewXuanFuActivity extends AppCompatActivity implements MyScroview.OnScrollListener {
@Bind(R.id.myscroview)
MyScroview myscroview;
@Bind(R.id.main_tab2)
LinearLayout main_tab2;// 在MyScrollView里面的购买布局
@Bind(R.id.main_tab1)
LinearLayout main_tab1;
@Bind(R.id.banner)
Banner banner;
@Bind(R.id.tab_mian)
LinearLayout tab_mian;
@Bind(R.id.tab1_t)
TextView tab1_t;
@Bind(R.id.tab1_v)
TextView tab1_v;
@Bind(R.id.tab2_t)
TextView tab2_t;
@Bind(R.id.tab2_v)
TextView tab2_v;
@Bind(R.id.tab3_t)
TextView tab3_t;
@Bind(R.id.tab3_v)
TextView tab3_v;
private int select = 1;
private int topHeight;
private List<String> titles = new ArrayList<>();
private List<String> images = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scrollview_xuan_fu);
}
@Override
public void onResume() {
super.onResume();
changeview(select);
initview( );
}
private void initview( ){
images.add("http://img.taodiantong.cn/v55183/infoimg/2013-07/130720115322ky.jpg");
images.add("http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg");
images.add("http://pic18.nipic.com/20111215/577405_080531548148_2.jpg");
images.add("http://pic15.nipic.com/20110722/2912365_092519919000_2.jpg");
images.add("http://pic.58pic.com/58pic/12/64/27/55U58PICrdX.jpg");
setBanner();
}
private void changeview(int index) {
tab1_t.setTextColor(Color.parseColor("#333333"));
tab2_t.setTextColor(Color.parseColor("#333333"));
tab3_t.setTextColor(Color.parseColor("#333333"));
tab1_v.setSelected(false);
tab2_v.setSelected(false);
tab3_v.setSelected(false);
if (index == 1) {
tab1_t.setTextColor(Color.parseColor("#59c2de"));
tab1_v.setSelected(true);
} else if (index == 2) {
tab2_t.setTextColor(Color.parseColor("#59c2de"));
tab2_v.setSelected(true);
} else {
tab3_t.setTextColor(Color.parseColor("#59c2de"));
tab3_v.setSelected(true);
}
}
@OnClick({R.id.top_left, R.id.image, R.id.tab1_mian, R.id.tab2_mian, R.id.tab3_mian})
void onClick(View view) {
switch (view.getId()) {
case R.id.top_left:
break;
case R.id.image:
break;
case R.id.tab1_mian:
select = 1;
changeview(select);
break;
case R.id.tab2_mian:
select = 2;
changeview(select);
break;
case R.id.tab3_mian:
select = 3;
changeview(select);
break;
}
}
//一定是在此方法中获取布局的实际高度
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
topHeight = main_tab2.getBottom() - main_tab1.getHeight();
}
}
//滑动距离判断
@Override
public void onScroll(int scrollY) {
if (scrollY >= topHeight) {
if (tab_mian.getParent() != main_tab1) {
main_tab2.removeView(tab_mian);
main_tab1.addView(tab_mian);
}
} else {
if (tab_mian.getParent() != main_tab2) {
main_tab1.removeView(tab_mian);
main_tab2.addView(tab_mian);
}
}
}
private void setBanner() {
banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR);
//设置图片加载器
banner.setImageLoader(new GlideImageLoader());
//设置图片集合
banner.setImages(images);
//设置banner动画效果
banner.setBannerAnimation(Transformer.Default);
//设置标题集合(当banner样式有显示title时)
banner.setBannerTitles(titles);
//设置自动轮播,默认为true
banner.isAutoPlay(true);
//设置轮播时间
banner.setDelayTime(2500);
//设置指示器位置(当banner模式中有指示器时)
banner.setIndicatorGravity(BannerConfig.CENTER);
//banner设置方法全部调用完毕时最后调用
banner.start();
banner.setOnBannerListener(new OnBannerListener() {
@Override
public void OnBannerClick(int position) {
}
});
}
}
来看下效果图(界面有点丑)