欢迎访问宙启技术站
智能推送

Android实现双向滑动特效的实例代码

发布时间:2023-05-15 16:08:35

双向滑动特效是一种常见的界面实现方式,可以让用户在不同的页面之间进行左右滑动切换。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)效果图

最后,看一下实现的效果图:

![双向滑动特效](https://img-blog.csdn.net/20180707143716436)

总结

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