Android实现双向滑动特效的实例代码
双向滑动特效是一种常见的界面实现方式,可以让用户在不同的页面之间进行左右滑动切换。Android中可以通过ViewPager和Fragment实现这种效果,下面是实现双向滑动特效的示例代码。
(1)布局文件
首先需要在布局文件中定义ViewPager和TabLayout:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@android:color/white">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:tabTextColor="@android:color/white"
app:tabIndicatorColor="@android:color/white"
app:tabSelectedTextColor="@android:color/white"/>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
(2)Java代码
定义一个MainActivity,创建PagerAdapter和Fragment,实现双向滑动效果:
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private TabLayout mTabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = findViewById(R.id.viewpager);
mTabLayout = findViewById(R.id.tabs);
// 创建PagerAdapter
PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(pagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
mViewPager.setPageTransformer(true, new ViewPager.PageTransformer() {
@Override
public void transformPage(@NonNull View page, float position) {
if (position < -1) {
page.setAlpha(0);
} else if (position <= 1) {
page.setAlpha(1);
page.setTranslationX(-position * page.getWidth());
page.setTranslationY(Math.abs(position) * page.getHeight());
} else {
page.setAlpha(0);
}
}
});
}
// 创建Fragment
public static class MyFragment extends Fragment {
private int mPage;
public static MyFragment newInstance(int page) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putInt("page", page);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPage = getArguments().getInt("page", 0);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my, container, false);
TextView textView = view.findViewById(R.id.textview);
textView.setText("Fragment " + mPage);
return view;
}
}
// 创建PagerAdapter
private static class PagerAdapter extends FragmentPagerAdapter {
private static final int NUM_PAGES = 5;
public PagerAdapter(@NonNull FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
@NonNull
@Override
public Fragment getItem(int position) {
return MyFragment.newInstance(position);
}
@Override
public int getCount() {
return NUM_PAGES;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return "Page " + position;
}
}
}
在上面的代码中,我们重写了ViewPager的setPageTransformer()方法,实现了双向滑动效果。在PagerAdapter中创建了5个Fragment,并通过TabLayout显示出来。
(3)效果图
最后,看一下实现的效果图:

总结
本文通过示例代码展示了Android中实现双向滑动特效的方法,其中主要使用了ViewPager和Fragment,并通过自定义PageTransformer实现了滑动效果。在实际开发中,可以根据项目需求对代码进行修改和优化,实现更加丰富、高效的界面效果。
