package com.mcxtzhang.coordinatordemo;
import android.graphics.Color;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import com.mcxtzhang.zxtcommonlib.recyclerview.CommonAdapter;
import com.mcxtzhang.zxtcommonlib.recyclerview.ViewHolder;
import java.util.ArrayList;
import java.util.List;
import static com.mcxtzhang.coordinatordemo.R.id.rv;
public class MainActivity extends AppCompatActivity {
private RecyclerView mRv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRv = (RecyclerView) findViewById(rv);
mRv.setLayoutManager(new LinearLayoutManager(this/*,LinearLayoutManager.HORIZONTAL,false*/));
mRv.setAdapter(new CommonAdapter<TestBean>(this, R.layout.item_rv, initDatas()) {
@Override
public void convert(ViewHolder holder, TestBean testBean) {
holder.setText(R.id.tv, testBean.getName());
}
});
final AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appBarLayout);
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
lp.setBehavior(new CstAppBehavior());
/* TextView tvHeader1 = (TextView) findViewById(R.id.tvHeader1);
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)tvHeader1.getLayoutParams();
lp.setBehavior(new AppBarLayout.CstCollapsedBehavior());*/
appBarLayout.post(new Runnable() {
@Override
public void run() {
Rect appBarRect = new Rect();
ViewGroupUtils.getDescendantRect((ViewGroup) getWindow().getDecorView(), appBarLayout, appBarRect);
Log.d("TAG", "appBarRect = [" + appBarRect +"]");
}
});
}
public List initDatas() {
List datas = new ArrayList<>();
for (int i = 0; i < 20; i++) {
datas.add(new TestBean("http://imgs.ebrun.com/resources/2016_03/2016_03_25/201603259771458878793312_origin.jpg", "张"));
datas.add(new TestBean("http://p14.go007.com/2014_11_02_05/a03541088cce31b8_1.jpg", "旭童"));
datas.add(new TestBean("http://news.k618.cn/tech/201604/W020160407281077548026.jpg", "多种type"));
datas.add(new TestBean("http://www.kejik.com/image/1460343965520.jpg", "多种type"));
datas.add(new TestBean("http://cn.chinadaily.com.cn/img/attachement/jpg/site1/20160318/eca86bd77be61855f1b81c.jpg", "多种type"));
datas.add(new TestBean("http://imgs.ebrun.com/resources/2016_04/2016_04_12/201604124411460430531500.jpg", "多种type"));
datas.add(new TestBean("http://imgs.ebrun.com/resources/2016_04/2016_04_24/201604244971461460826484_origin.jpeg", "多种type"));
datas.add(new TestBean("http://www.lnmoto.cn/bbs/data/attachment/forum/201408/12/074018gshshia3is1cw3sg.jpg", "多种type"));
}
return datas;
}
public static class CstAppBehavior extends AppBarLayout.Behavior {
private static final String TAG = "zxt";
@Override
public float getScrimOpacity(CoordinatorLayout parent, AppBarLayout child) {
return 1;
}
@Override
public int getScrimColor(CoordinatorLayout parent, AppBarLayout child) {
return Color.GREEN;
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes) {
Log.d(TAG, "onStartNestedScroll() called with:, child = [" + child + "], directTargetChild = [" + directTargetChild + "], target = [" + target + "], nestedScrollAxes = [" + nestedScrollAxes + "]");
return super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onNestedScrollAccepted(CoordinatorLayout coordinatorLayout, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes) {
Log.d(TAG, "onNestedScrollAccepted() called with: coordinatorLayout = , child = [" + child + "], directTargetChild = [" + directTargetChild + "], target = [" + target + "], nestedScrollAxes = [" + nestedScrollAxes + "]");
super.onNestedScrollAccepted(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout abl, View target) {
Log.d(TAG, "onStopNestedScroll() called with: abl = [" + abl + "], target = [" + target + "]");
super.onStopNestedScroll(coordinatorLayout, abl, target);
}
boolean isConsumed = true;
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) {
Log.v(TAG, "onNestedPreScroll() called with:, child = [" + child + "], target = [" + target + "], dx = [" + dx + "], dy = [" + dy + "], consumed = [" + consumed + "]");
//isConsumed = !isConsumed;
if (isConsumed) {
consumed[1] = dy;
} else {
}
//super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
}
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
Log.v(TAG, "onNestedScroll() called with: child = [" + child + "], target = [" + target + "], dxConsumed = [" + dxConsumed + "], dyConsumed = [" + dyConsumed + "], dxUnconsumed = [" + dxUnconsumed + "], dyUnconsumed = [" + dyUnconsumed + "]");
if (isConsumed) {
ViewCompat.offsetTopAndBottom(child, -dyConsumed);
} else {
}
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
}
@Override
public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) {
return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed);
}
@Override
public boolean onNestedPreFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY) {
return super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY);
}
}
}