Android ViewPager多页面滑动切换以及动画效果
来源:互联网 发布:日本漫画软件下载 编辑:程序博客网 时间:2024/05/01 22:40
viewpage实现多页面滑动是通过pageAdapter或FragmentPagerAdapter来实现页面的滑动切换
有的需要类似图片的三角形的滑动动画三角形是更具页面滑动而滑动的并且指定在相应的选项卡下
功能的实现首先从android xml文件布局开始贴代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lin_title_father" android:background="@color/titlecolor" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="55dp" android:orientation="horizontal" > <ImageView android:id="@+id/img_main_bookshelf" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1.0" android:src="@mipmap/tab_bookshelf" android:scaleType="center" /> <ImageView android:id="@+id/img_main_home" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1.0" android:src="@mipmap/tab_home" android:scaleType="center" /> <ImageView android:id="@+id/img_main_search" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1.0" android:src="@mipmap/tab_search" android:scaleType="center" /> </LinearLayout> <ImageView android:id="@+id/iv_Main_Sign" android:layout_width="wrap_content" android:layout_height="4dp" android:src="@mipmap/ivmainsign" android:scaleType="centerInside" /></LinearLayout>头部的布局
界面布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_rootview" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/backggroudcolor" android:orientation="vertical" tools:context=".MainActivity"> <include layout="@layout/titel_bar" /> <android.support.v4.view.ViewPager android:id="@+id/vp_main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/searchbackgroudchcolor" /></LinearLayout>activity代码
import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.util.DisplayMetrics;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Toast;import com.shenfan.ui.activity.book.TabBookFragment;import com.shenfan.ui.activity.home.TabHomeFragment;import com.shenfan.ui.activity.search.TabSearchFargment;import java.util.ArrayList;import java.util.List;import androidsf.androidsf.R;public class MainActivity extends FragmentActivity implements View.OnClickListener { ImageView ivMainSign; ViewPager vpMainContent; private List<ImageView> views = new ArrayList<ImageView>(); private FragmentManager fragmentManager; private int currentFragmentIndex; private int item_width;//按钮宽度 private TabBookFragment tabBookFragment; private TabHomeFragment tabHomeFragment; private TabSearchFargment tabSearchFargment; private ImageView imgmainbookshelf, imgmainsearch, imgmainhome; ArrayList<Fragment> fragmentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ivMainSign = (ImageView) findViewById(R.id.iv_Main_Sign); vpMainContent = (ViewPager) findViewById(R.id.vp_main_content); imgmainbookshelf = (ImageView) findViewById(R.id.img_main_bookshelf); imgmainhome = (ImageView) findViewById(R.id.img_main_home); imgmainsearch = (ImageView) findViewById(R.id.img_main_search); imgmainbookshelf.setOnClickListener(this); imgmainsearch.setOnClickListener(this); imgmainhome.setOnClickListener(this);// vpMainContent.setOffscreenPageLimit(0); initView(); initViewPager(); } @Override protected void onResume() { super.onResume(); } private void initView() { //计算屏幕宽度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); item_width = dm.widthPixels / 3; ivMainSign.setMaxWidth(item_width); ivMainSign.setLayoutParams(new LinearLayout.LayoutParams(item_width,8));//设置光标的位置 ivMainSign.setOnClickListener(this); } /** * 初始化viewPager */ private void initViewPager() { fragmentList = new ArrayList<>(); fragmentManager = getSupportFragmentManager(); if (null == tabBookFragment) tabBookFragment = new TabBookFragment(); if (null == tabHomeFragment) tabHomeFragment = new TabHomeFragment(); if (null == tabSearchFargment) { tabSearchFargment = new TabSearchFargment(); } fragmentList.add(tabBookFragment); fragmentList.add(tabHomeFragment); fragmentList.add(tabSearchFargment); MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter( fragmentManager, fragmentList); vpMainContent.setAdapter(fragmentPagerAdapter); vpMainContent.setOnPageChangeListener(new MyOnPageChangeListener());// vpMainContent.setCurrentItem(0); } private class MyFragmentPagerAdapter extends FragmentPagerAdapter { private ArrayList<Fragment> mFragments; public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> mFragments) { super(fm); this.mFragments = mFragments; } @Override public Fragment getItem(int arg0) { return mFragments.get(arg0); } @Override public int getCount() { return mFragments.size(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.img_main_bookshelf: currentFragmentIndex = 0; vpMainContent.setCurrentItem(currentFragmentIndex); break; case R.id.img_main_home: currentFragmentIndex = 1; vpMainContent.setCurrentItem(currentFragmentIndex); break; case R.id.img_main_search: currentFragmentIndex = 2; vpMainContent.setCurrentItem(currentFragmentIndex); break; default: break; } } public class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { @Override public void onPageSelected(int position) { } //positionx选项卡 //positionOffset比例 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { //获取父布局布局管理器 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ivMainSign.getLayoutParams()); /** * 设置margin的值思路主要是position的值为当前fragment的下标 positionOffset为比例数当第一个页面滑动到第二个的时候positionOffset= 0 * 如果只采用item_width * position显得有些僵硬如果加上item_width * positionOffset就有动画的效果了 */ layoutParams.setMargins((int) (item_width * positionOffset) + item_width * position, 0, 0, 0); ivMainSign.setLayoutParams(layoutParams); } @Override public void onPageScrollStateChanged(int state) { } } private long mPressedTime = 0; @Override public void onBackPressed() { long mNowTime = System.currentTimeMillis();//获取第一次按键时间 if ((mNowTime - mPressedTime) > 4000) {//比较两次按键时间差 Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); mPressedTime = mNowTime; } else {//退出程序 this.finish(); System.exit(0); } }}
主要思路是通过 OnPageChangeListener的onPageScrolled方法去实现光标滑动的功能
0 0
- [Android实例] ViewPager多页面滑动切换以及动画效果
- [Android实例] ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- [Android实例] ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果!!!
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Toolbar的用法,实现导航栏的切换
- HDU_1087_SuperJumping!Jumping!Jumping!
- 如何提高tableView的性能
- python print格式化输出
- 文本文件加密解密(一)
- Android ViewPager多页面滑动切换以及动画效果
- UnicodeEncodeError: 'gbk' codec can't encode character '\ufeff' in position 0: illegal multibyte seq
- 树莓派-WebCamera图像采集(OpenCV)
- 使用 ftrace 调试 Linux 内核,第 1 部分
- 使用dbcp连接池连接数据库
- genymotion-unable to load virtualbox engine-Windows
- mysql备份
- SparkR安装
- Spring Boot使用自定义的properties