123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package com.yxf.clippathlayout.sample;
- import android.os.Bundle;
- import android.support.annotation.NonNull;
- import android.support.annotation.Nullable;
- import android.support.v4.app.Fragment;
- import android.support.v4.widget.NestedScrollView;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import com.yxf.clippathlayout.Utils;
- import com.yxf.clippathlayout.transition.ProgressController;
- import com.yxf.clippathlayout.transition.TransitionAdapter;
- import com.yxf.clippathlayout.transition.TransitionFrameLayout;
- public class ScrollTransitionFragment extends Fragment implements NestedScrollView.OnScrollChangeListener {
- private static final String TAG = Utils.getTAG(ScrollTransitionFragment.class);
- private NestedScrollView mLayout;
- private TransitionFrameLayout mImageContainer;
- private ImageView mBelowView, mAboveView;
- private ProgressController mController;
- private TransitionAdapter mTransitionAdapter;
- private boolean mAbove = true;
- private boolean mOver = true;
- @Nullable
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- mLayout = (NestedScrollView) inflater.inflate(R.layout.fragment_scroll_transition, null);
- mImageContainer = mLayout.findViewById(R.id.image_container);
- mBelowView = mLayout.findViewById(R.id.below_image);
- mAboveView = mLayout.findViewById(R.id.above_image);
- mLayout.setOnScrollChangeListener(this);
- mLayout.post(new Runnable() {
- @Override
- public void run() {
- if (mController == null) {
- initController();
- }
- }
- });
- return mLayout;
- }
- @Override
- public void onScrollChange(NestedScrollView nestedScrollView, int i, int i1, int i2, int i3) {
- int top = mImageContainer.getTop();
- int height = mImageContainer.getHeight();
- int scrollCenter = i1 + nestedScrollView.getHeight() / 2;
- if (scrollCenter < top && mAbove) {
- mOver = true;
- } else if (scrollCenter > top + height && !mAbove) {
- mOver = true;
- } else {
- mOver = false;
- }
- controlProgress(scrollCenter - top, height);
- }
- private void controlProgress(int current, int total) {
- if (mOver) {
- if (mController != null) {
- mTransitionAdapter.finish();
- mController = null;
- }
- } else {
- if (mController == null) {
- initController();
- }
- if (mAbove) {
- current = total - current;
- }
- mController.setProgress(current / (total * 1f));
- }
- }
- private void initController() {
- if (mAbove) {
- int x = mImageContainer.getWidth() * 3 / 4;
- int y = mImageContainer.getHeight() * 3 / 4;
- mTransitionAdapter = mImageContainer.switchView(mBelowView);
- mTransitionAdapter.setPathCenter(x, y);
- mController = mTransitionAdapter.getController();
- mAbove = false;
- } else {
- int x = mImageContainer.getWidth() / 4;
- int y = mImageContainer.getHeight() / 4;
- mTransitionAdapter = mImageContainer.switchView(mAboveView);
- mTransitionAdapter.setPathCenter(x, y);
- mController = mTransitionAdapter.getController();
- mAbove = true;
- }
- }
- }
|