栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

android的viewPage2左右切换与页面上下滑动有冲突

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android的viewPage2左右切换与页面上下滑动有冲突

效果图 主要代码
package com.coral3.ah.ui.activity;

import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.coral3.ah.ui.fragment.tabbar.TabbSecFragment;
import com.coral3.ah.ui.fragment.tabbar.TabbThiFragment;
import com.coral3.common_module.base.baseActivity;
import com.coral3.update_module.ToUpdateAppManager;
import com.coral3.ah.R;
import com.coral3.ah.adapter.MyFragmentPagerAdapter;
import com.coral3.ah.ui.fragment.tabbar.HomeFragmentRv;
import com.coral3.ah.ui.fragment.tabbar.MeFragment;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class TabbarActivity extends baseActivity implements View.OnClickListener {

    private ViewPager2 viewPager;
    private List fragments = new ArrayList<>();
    private LinearLayout llContainer;
    private TextView title;
    private LinearLayout titleLayout, tempLl;
    private GestureDetector gestureDetector;
    private List titles = (Arrays.asList("群心", "之心", "友心", "我的"));

    private Handler handler = new Handler(new Handler.Callback() {

        @Override
        public boolean handleMessage(Message message) {
            viewPager.setCurrentItem(message.what, true);
            return false;
        }
    });
    private ArrayList drawables;
    private ArrayList drawablesActive;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tabbar);
        initView();
        initPager();
        initListener();
        initStaticData();
        initTabbar();
//        if(!SysManager.getInstance().isApkInDebug(this)) ToUpdateAppManager.update(this);
    }

    @Override
    public void initView() {
        llContainer = findViewById(R.id.ll_container);
        titleLayout = findViewById(R.id.tl_title);
        title = findViewById(R.id.tv_title);
        fragments.add(HomeFragmentRv.newInstance(""));
        fragments.add(TabbSecFragment.newInstance());
        fragments.add(TabbThiFragment.newInstance());
        fragments.add(MeFragment.newInstance());
        
        registerMyTouchListener(myTouchListener);
        gestureDetector = new GestureDetector(this, new MyGestureListener());
    }

    @Override
    public void initListener() {
        viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int pos) {
                super.onPageSelected(pos);
                setTabbar(pos, (LinearLayout) llContainer.getChildAt(pos), tempLl, false);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });
        for (int i = 0, len = llContainer.getChildCount(); i < len; i++) {
            llContainer.getChildAt(i).setTag(i);
            llContainer.getChildAt(i).setOnClickListener(this);
        }
    }

    // 初始化pager
    private void initPager() {
        viewPager = findViewById(R.id.viewpager2_main);
        MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), getLifecycle(), fragments);
        viewPager.setAdapter(myFragmentPagerAdapter);
        viewPager.setUserInputEnabled(true); // 是否开启滑动
        viewPager.setOffscreenPageLimit(3);
    }

    // 初始化数据
    private void initStaticData() {
        drawables = new ArrayList<>();
        drawables.add(R.drawable.home);
        drawables.add(R.drawable.tabb_sec);
        drawables.add(R.drawable.tabb_thi);
        drawables.add(R.drawable.me);
        drawablesActive = new ArrayList<>();
        drawablesActive.add(R.drawable.home_active);
        drawablesActive.add(R.drawable.tabb_sec_active);
        drawablesActive.add(R.drawable.tabb_thi_active);
        drawablesActive.add(R.drawable.me_active);
        title = titleLayout.findViewById(R.id.tv_title);
    }

    // 初始化底部导航栏样式
    private void initTabbar() {
        setTabbar(0, (LinearLayout) llContainer.getChildAt(0), null, true);
    }

    // 设置底部导航栏
    private void setTabbar(int i, LinearLayout nextView, LinearLayout lastView, Boolean isTbbarClick) {
        if (tempLl != nextView) {
            tempLl = nextView;
            if (lastView != null) {
                ((ImageView) lastView.getChildAt(0)).setImageResource(drawables.get((int) lastView.getTag()));
                ((TextView) lastView.getChildAt(1)).setTextColor(getResources().getColor(R.color.tabbar_no_act));
            }
            ((ImageView) nextView.getChildAt(0)).setImageResource(drawablesActive.get(i));
            ((TextView) nextView.getChildAt(1)).setTextColor(getResources().getColor(R.color.tabbar_act));
            title.setText(titles.get(i));
            if (isTbbarClick) viewPager.setCurrentItem(i, false);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        ToUpdateAppManager.update(this);
    }

    @Override
    public void onClick(View view) {
        if (view.getTag() != null)
            setTabbar((int) view.getTag(), (LinearLayout) view, tempLl, true);
    }

    public void changeViewPageScroll(Boolean b) {
        viewPager.setUserInputEnabled(b); // 是否开启滑动
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        
        unRegisterMyTouchListener(myTouchListener);
    }

    
    class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            if (Math.abs(e1.getY() - e2.getY()) - Math.abs(e1.getX() - e2.getX()) > 0) {
                // 禁止左右滑动
                changeViewPageScroll(false);
            } else {
                // 开启左右滑动
                changeViewPageScroll(true);
            }
            return true;
        }
    }

    
    MyTouchListener myTouchListener = new MyTouchListener() {
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            //处理手势事件
            return gestureDetector.onTouchEvent(event);
        }
    };

    public interface MyTouchListener {
        
        boolean onTouchEvent(MotionEvent event);
    }

    
    private ArrayList myTouchListeners = new ArrayList<>();

    
    public void registerMyTouchListener(MyTouchListener listener) {
        myTouchListeners.add(listener);
    }

    
    public void unRegisterMyTouchListener(MyTouchListener listener) {
        myTouchListeners.remove(listener);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        for (MyTouchListener listener : myTouchListeners) {
            listener.onTouchEvent(ev);
        }
        return super.dispatchTouchEvent(ev);
    }
}

源于无知与不珍惜

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736721.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号