前面说到了 Viewpager ,当然还有 除了 Viewpager 的 还有 ViewFilpper 和 ViewFlow
现在说下 ViewFipper 的简单使用,
首先说一下, ViewPager 继承 ViewGroup Viewpager 有自己的adapter 可以和 fragment ,view 各种配合 ,适合动态的 复杂的交互。
ViewFilpper 继承 ViewAnimation 这个呢,就适合一些简单的页面 比如引导,欢迎页面 那种的静态页面 比较适合。
看下效果图。
public class MainActivity extends Activity { private ViewFlipper viewFlipper; private List<View> views = new ArrayList<View>(); private Timer timer =new Timer(); private LinearLayout linear_all_point; // 存储点的容器 private int offset; // 位移量 private ImageView curDot; private int nowPosition; // 记录当前的位置 private int aa = 0; private Handler han = new Handler(){ public void handleMessage(android.os.Message msg) { if(aa!= 3){ viewFlipper.showNext(); moveCursorTo(aa); aa++; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); linear_all_point = (LinearLayout)this.findViewById(R.id.dot_contain); curDot = (ImageView) findViewById(R.id.cur_dot); viewFlipper = (ViewFlipper)this.findViewById(R.id.view_flipper); // 早堆假数据 View v1 = LayoutInflater.from(this).inflate(R.layout.aa1, null); // v1.setId(1); View v2 = LayoutInflater.from(this).inflate(R.layout.aa2, null); // v2.setId(2); View v3 = LayoutInflater.from(this).inflate(R.layout.aa3, null); // v3.setId(3); views.add(v1); views.add(v2); views.add(v3); for (int i = 0; i < views.size(); i++) { viewFlipper.addView(views.get(i)); } Animation inAnimation = AnimationUtils.loadAnimation(this, R.anim.right_in); Animation outAnimation = AnimationUtils.loadAnimation(this, R.anim.left_out); // animation 里面得到当前的View 然后改变引导界面下面的指示器图片 outAnimation.setAnimationListener(new AnimationListener(){ @Override public void onAnimationStart(Animation animation) { System.out.println("start= ================="); // 这里是 左边图片自动划出去的时候 animation start 调用 } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { System.out.println("viewFlipper.getCurrentView().getId()=="+ viewFlipper.getCurrentView().getId()); } }); viewFlipper.setInAnimation(inAnimation); viewFlipper.setOutAnimation(outAnimation); // 一些方法 // viewFlipper.startFlipping(); 开始滑动 // viewFlipper.stopFlipping(); 停止滑动 // viewFlipper.showNext(); 下一个 // viewFlipper.showPrevious(); 上一个 // viewFlipper.isFlipping(); // viewFlipper.isAutoStart(); /** * 1. 设置自动播放功能 这个注掉了 我用的是定时器,自动播放的话 在上面的 * * onAnimationStart 中 切换指示器的图片就好了 * * viewFlipper.setAutoStart(true); * viewFlipper.setFlipInterval(3000); //隔3秒 * * */ //初始化点 每个底部小点的指示器 for(int i=0; i< views.size() ; i++){ ImageView dotView = new ImageView(this); dotView.setImageResource(R.drawable.dot1_w); dotView.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,1.0f)); linear_all_point.addView(dotView); } //当curDot的所在的树形层次将要被绘出时此方法被调用 curDot.getViewTreeObserver().addOnPreDrawListener( new OnPreDrawListener() { public boolean onPreDraw() { // 获取ImageView的宽度也就是点图片的宽度 offset = curDot.getWidth(); return true; } }); /** * 2. 还可以用 定时器 控制自动滑动 这个和 handler配合 然后更改指示器 */ timer.schedule(new TimerTask() { @Override public void run() { han.sendMessage(new Message()); } }, 1 , 2000); } //指示器 移动 private void moveCursorTo(int position) { AnimationSet animationSet = new AnimationSet(true); TranslateAnimation tAnim = new TranslateAnimation(offset* nowPosition, offset * position, 0, 0); animationSet.addAnimation(tAnim); animationSet.setDuration(10); animationSet.setFillAfter(true); curDot.startAnimation(animationSet); } }
animation
right_in 和 left_out 配合 (右边的图片进来,现在的图片 往左边出去 - -)
首先,right_in
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="1500" android:fromXDelta="100%p" android:toXDelta="0" /> <alpha android:duration="1500" android:fromAlpha="0.1" android:toAlpha="1.0" /> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="1500" android:fromXDelta="0" android:toXDelta="-100%p" /> <alpha android:duration="1500" android:fromAlpha="1.0" android:toAlpha="0.1" /> </set>
left_in 和 right_out 配合 (向右边滑动的时候, 左边的图片进来 ,现在的图片从右边出去)
首先,left_in
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="1500" android:fromXDelta="-100%p" android:toXDelta="0" /> <alpha android:duration="1500" android:fromAlpha="0.1" android:toAlpha="1.0" /> </set>
right_out
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="1500" android:fromXDelta="0" android:toXDelta="100%p" /> <alpha android:duration="1500" android:fromAlpha="1.0" android:toAlpha="0.1" /> </set>
xml。指示器那个也是从 前面说的 viewpager中复制过来的
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ViewFlipper android:id="@+id/view_flipper" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:gravity="center" android:layout_marginBottom="22.0dip"> <LinearLayout android:id="@+id/dot_contain" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" > </LinearLayout> <ImageView android:id="@+id/cur_dot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/dot2_w" /> </FrameLayout> </RelativeLayout>