使用ViewPager实现页面滑动(点击)跳转效果(类似于微信页面)
2014-09-05 16:34
836 查看
仿微信页面,实现滑动跳转的效果,点击也可以,使用到ViewPager的知识和动画的效果,动画图片主要用来标志当前页面,显示滑动轨迹。
主Activity代码如下:
效果图如下:
主Activity代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#222222" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/textView1" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="#999999" android:gravity="center" android:text="页面1" android:textColor="#222222" /> <TextView android:id="@+id/textView2" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="#999999" android:gravity="center" android:text="页面2" android:textColor="#222222" /> <TextView android:id="@+id/textView3" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="#999999" android:gravity="center" android:text="页面3" android:textColor="#222222" /> </LinearLayout> <ImageView android:id="@+id/cursor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/cursor" android:background="#222222"/> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>Layout1.xml的代码(其他两个省略不写了,原理都一样):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#ff0000" > </LinearLayout>重写一个PagerAdapter
package com.example.pager; import java.util.List; import android.support.v4.view.PagerAdapter; import android.view.View; import android.support.v4.view.ViewPager; public class MyAdapter extends PagerAdapter{ List<View> viewLists; public MyAdapter(List<View> lists) { viewLists = lists; } @Override public int getCount() { //获得size // TODO Auto-generated method stub return viewLists.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } @Override public void destroyItem(View view, int position, Object object) //销毁Item { ((ViewPager) view).removeView(viewLists.get(position)); } @Override public Object instantiateItem(View view, int position) //实例化Item { ((ViewPager) view).addView(viewLists.get(position), 0); return viewLists.get(position); } }主Activity的页面代码如下:
package com.example.pager; import java.util.List; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.support.v4.view.ViewPager; import android.view.View; import android.widget.TextView; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.DisplayMetrics; import android.graphics.Matrix; import android.widget.ImageView; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; public class MainActivity extends Activity { private ViewPager viewPager; private ImageView imageView; private List<View> lists = new ArrayList<View>(); private MyAdapter myAdapter; private Bitmap cursor; private int offSet; private int currentItem; private Matrix matrix = new Matrix();// 矩阵 private int bmWidth; private Animation animation;//动画效果 private TextView textView1; private TextView textView2; private TextView textView3; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.cursor); textView1 = (TextView) findViewById(R.id.textView1); textView2 = (TextView) findViewById(R.id.textView2); textView3 = (TextView) findViewById(R.id.textView3); lists.add(getLayoutInflater().inflate(R.layout.layout1, null)); lists.add(getLayoutInflater().inflate(R.layout.layout2, null)); lists.add(getLayoutInflater().inflate(R.layout.layout3, null)); initeCursor(); myAdapter = new MyAdapter(lists); viewPager = (ViewPager) findViewById(R.id.viewPager); viewPager.setAdapter(myAdapter); viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int arg0) {// 当滑动式,顶部的imageView是通过animation缓慢的滑动 /* * TranslateAnimation(float formXDelta,float toXDelta,float * fromYDelta,float toYDelta)前两个参数的意思分别代表是动画开始点(结束点)距离起始位置的X坐标差值 * 后两个参数就是带便动画开始点 * (结束点)距离起始位置的Y坐标差值,动画最开始的XY坐标分别为(0,0),以上四个值是相对值,不是绝对值 */ switch (arg0) { case 0://要选择的页面是0 if (currentItem == 1) {//当前页面是1的时候 animation = new TranslateAnimation( offSet * 2 + bmWidth, 0, 0, 0); } else if (currentItem == 2) {//当前页面时2的时候 animation = new TranslateAnimation(offSet * 4 + 2 * bmWidth, 0, 0, 0); } break; case 1: if (currentItem == 0) { animation = new TranslateAnimation(0, offSet * 2 + bmWidth, 0, 0); } else if (currentItem == 2) { animation = new TranslateAnimation(offSet * 4 + bmWidth * 2, offSet * 2 + bmWidth, 0, 0); } break; case 2: if (currentItem == 0) { animation = new TranslateAnimation(0, 4 * offSet + 2 * bmWidth, 0, 0); } else if (currentItem == 1) { animation = new TranslateAnimation( offSet * 2 + bmWidth, 4 * offSet + 2 * bmWidth, 0, 0); } } currentItem = arg0; animation.setDuration(500);// 设置动画持续时间 animation.setFillAfter(true);// 动画终止时停留在最后一帧,不然会回到没有执行之前的状态 imageView.startAnimation(animation); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); // ==========点击tevtView跳转事件 textView1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub viewPager.setCurrentItem(0); } }); textView2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub viewPager.setCurrentItem(1); } }); textView3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub viewPager.setCurrentItem(2); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } private void initeCursor() { cursor = BitmapFactory .decodeResource(getResources(), R.drawable.cursor); bmWidth = cursor.getWidth(); DisplayMetrics dm; dm = getResources().getDisplayMetrics(); offSet = (dm.widthPixels - 3 * bmWidth) / 6;// dm.widthPixels的意思是获取屏幕分辨率的宽度 matrix.setTranslate(offSet, 0);// 是图片移动到某一个位置 imageView.setImageMatrix(matrix);// 需要iamgeView的scaleType为matrix currentItem = 0; } }根据屏幕的分辨率和图片的宽度计算偏移量(这部分是个重点)
效果图如下:
相关文章推荐
- Fragment嵌套ViewPager加上RadioButton实现微信页面滑动点击效果
- (四)使用PagerSlidingTabStrip和ViewPager实现可左右滑动和点击效果功能
- Android中使用ViewPager和PagerTabStrip实现页面滑动效果
- viewpager+fragment的懒加载实现微信点击和滑动切换功能(切换效果)
- Android ViewPager实现滑动切换页面+底部tab点击切换页面(类微信首页)
- Android使用TabLayou+fragment+viewpager实现滑动切换页面效果
- viewpager的setCurrentItem 底部导航栏点击按钮实现直接跳转,去掉滑动效果
- Android中使用ViewPager和PagerTabStrip实现页面滑动效果
- Android实现左右滑动指引效果(使用ViewPager)
- 使用自定义RadioButton和ViewPager实现TabHost效果和带滑动的页卡效果
- 使用ViewPager+GridView实现横向滑动的效果(一)
- Android---使用ViewPager来实现屏幕滑动效果
- 使用自定义RadioButton和ViewPager实现TabHost效果和带滑动的页卡效果。
- 使用ViewPager和GridView配合,实现GridView横向水平滑动的效果。
- 【Android 开发】:UI控件之 ViewPager 多页面滑动效果控件的的使用(二)
- 利用viewpager、Fragment、pagertabStrip 实现多页面滑动效果
- 使用ViewPager+GridView实现横向滑动的效果(二)
- Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
- 【Android 界面效果27】利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
- 【Android 开发】:UI控件之 ViewPager 多页面滑动效果控件的的使用