前言:ViewPager与Fragment的使用,目的:减少用户操作,实现滑动的效果。 话不多说,走起! 一、ViewPager与ViewPager2的区别 参考ViewPager2与ViewPager的区别 - Tears_fg - 博客园 (cnblogs.com)
二、setBackgroundResource和setBackgroundColor的区别
setBackgroundResource和setBackgroundColor的区别:个人理解
setBackgroundResource设置的是最底层的颜色,当改变完颜色以后,如果布局在xml文件中默认颜色是white,会被white遮盖掉。
setBackgroundColor设置的是中间层的颜色,相当于XML文件里的颜色setBackgroundColor(context.getResouce().getColor(R.color.XXX))可以理解为改变的是最上层的颜色,所以,不管xml布局中的颜色是什么色,使用了setBackgroundColor,就会在布局颜色上层刷上颜色。
关于setBackgroundColor:如果在XML文件里使用background属性设置了样式,要想在java里面改变原有样式,一般不用setBackgroundColor方法,用setBackgroundResource。
三、ViewPager的registerOnPageChangeCallback方法
模拟微信使用界面
1、初始化中间的pager页面---initPager()
2、初始化中间的下方的tab页面---initTabView()
3、记录当前选择页面ivCurrent,用于保存状态,实现切换
4、viewPager.setCurrentItem(),实现当点击tab button的时候,pager页面跟着滑动
5、onClick,实现当点击tab button的时候,图标选择状态更新与释放
package com.example.viewpagerandfragment2;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
public class MainActivity<viewPager> extends AppCompatActivity implements View.OnClickListener{
private ViewPager2 viewPager;
private LinearLayout llChat,llContacts,llFind,llProfile;
private ImageView ivChat,ivContacts,ivFind,ivProfile,ivCurrent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initPager();
initTabView();
}
private void initTabView() {
llChat = findViewById(R.id.id_tab_weixin);
llChat.setOnClickListener(this);
llContacts = findViewById(R.id.id_tab_contact);
llContacts.setOnClickListener(this);
llFind = findViewById(R.id.id_tab_find);
llFind.setOnClickListener(this);
llProfile = findViewById(R.id.id_tab_profile);
llProfile.setOnClickListener(this);
ivChat = findViewById(R.id.id_iv_weixin);
ivContacts = findViewById(R.id.id_iv_contact);
ivFind = findViewById(R.id.id_iv_find);
ivProfile = findViewById(R.id.id_iv_profile);
ivChat.setSelected(true);
ivCurrent = ivChat;
}
private void initPager() {
viewPager = findViewById(R.id.id_viewPager);
ArrayList<Fragment> fragmentArrayList = new ArrayList<>();
fragmentArrayList.add(BlankFragment.newInstance("微信"));
fragmentArrayList.add(BlankFragment.newInstance("通讯录"));
fragmentArrayList.add(BlankFragment.newInstance("发现"));
fragmentArrayList.add(BlankFragment.newInstance("我"));
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),getLifecycle(),fragmentArrayList);
viewPager.setAdapter(myFragmentPagerAdapter);
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 position) {
super.onPageSelected(position);
changeTable(position);
}
@Override
//页面滚动状态改变
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
}
});
}
private void changeTable(int position) {
ivCurrent.setSelected(false);
switch (position){
case R.id.id_tab_weixin:
viewPager.setCurrentItem(0);
case 0:
ivChat.setSelected(true);
ivCurrent = ivChat;
break;
case R.id.id_tab_contact:
viewPager.setCurrentItem(1);
case 1:
ivContacts.setSelected(true);
ivCurrent = ivContacts;
break;
case R.id.id_tab_find:
viewPager.setCurrentItem(2);
case 2:
ivFind.setSelected(true);
ivCurrent = ivFind;
break;
case R.id.id_tab_profile:
viewPager.setCurrentItem(3);
case 3:
ivProfile.setSelected(true);
ivCurrent = ivProfile;
break;
}
}
@Override
public void onClick(View view) {
changeTable(view.getId());
}
}