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);
}
}
源于无知与不珍惜



