GVKun编程网logo

一手遮天 Android - view(集合类): ViewFlipper 基础(一手遮天8p)

38

以上就是给各位分享一手遮天Android-view,其中也会对集合类:ViewFlipper基础进行解释,同时本文还将给你拓展Android-解决ViewFlipper与ScrollView滑动响应事

以上就是给各位分享一手遮天 Android - view,其中也会对集合类: ViewFlipper 基础进行解释,同时本文还将给你拓展Android - 解决 ViewFlipper 与 ScrollView 滑动响应事件拦截的问题【转】、Android Animation 之 ViewAnimator\ViewFlipper、android ViewFlipper、android viewFlipper 使用等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

一手遮天 Android - view(集合类): ViewFlipper 基础(一手遮天8p)

一手遮天 Android - view(集合类): ViewFlipper 基础(一手遮天8p)

项目地址 https://github.com/webabcd/AndroidDemo
作者 webabcd

一手遮天 Android - view(集合类): ViewFlipper 基础

示例如下:

/view/collection/ViewFlipperDemo1.java

/**
 * ViewFlipper - 页面翻页控件
 *
 * 本例介绍了如何让 ViewFlipper 自动翻页,以及如何通过手势操作翻页 ViewFlipper
 */

package com.webabcd.androiddemo.view.collection;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.ViewFlipper;

import com.webabcd.androiddemo.R;

public class ViewFlipperDemo1 extends AppCompatActivity {

    // 用于演示 ViewFlipper 的自动翻页
    private ViewFlipper mViewFlipper1;
    // 用于演示 ViewFlipper 的手势操作翻页
    private ViewFlipper mViewFlipper2;

    // 用于保存手指触摸屏幕时的 x 坐标
    private float mStartTouchX;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_collection_viewflipperdemo1);

        mViewFlipper1 = findViewById(R.id.viewFlipper1);
        mViewFlipper2 = findViewById(R.id.viewFlipper2);

        sample();
    }

    private void sample() {
        /**
         * addView() - 为 ViewFlipper 添加一个子 view
         * setFlipInterval() - 翻页动画的间隔时间,单位:毫秒
         * setInAnimation() - 进入的动画
         * setoutAnimation() - 离开的动画
         * startFlipping() - 启动动画(默认是不会启动动画的)
         * stopFlipping() - 停止动画
         */
        mViewFlipper1.setFlipInterval(3000);
        mViewFlipper1.setInAnimation(this, R.anim.viewflipper_right_in);
        mViewFlipper1.setoutAnimation(this, R.anim.viewflipper_right_out);
        mViewFlipper1.startFlipping();
    }


    // 通过手势控制 ViewFlipper 的翻页
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            // 手指触摸时
            case MotionEvent.ACTION_DOWN: {
                // 保存手指触摸屏幕时的 x 坐标
                mStartTouchX = event.getX();
                break;
            }
            // 手指触摸后移动时
            case MotionEvent.ACTION_MOVE: {
                break;
            }
            // 当手离开时
            case MotionEvent.ACTION_UP: {
                /**
                 * setInAnimation() - 进入的动画
                 * setoutAnimation() - 离开的动画
                 * showNext() - 翻页到 ViewFlipper 中的下一个 view
                 * showPrevIoUs() - 翻页到 ViewFlipper 的上一个 view
                 */

                // 手指从右向左滑动(这里判断手指的横向移动距离要大于 100 才生效)
                if (mStartTouchX - event.getX() > 100) {
                    mViewFlipper2.setInAnimation(this, R.anim.viewflipper_right_in);
                    mViewFlipper2.setoutAnimation(this, R.anim.viewflipper_right_out);
                    mViewFlipper2.showNext();
                }
                // 手指从左向右滑动(这里判断手指的横向移动距离要大于 100 才生效)
                else if (event.getX() - mStartTouchX > 100) {
                    mViewFlipper2.setInAnimation(this, R.anim.viewflipper_left_in);
                    mViewFlipper2.setoutAnimation(this, R.anim.viewflipper_left_out);
                    mViewFlipper2.showPrevIoUs();
                }

                break;
            }
        }

        return true;
    }
}

/layout/activity_view_collection_viewflipperdemo1.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="match_parent"
    android:orientation="vertical">

    <ViewFlipper
        android:id="@+id/viewFlipper1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/orange"
        android:padding="24dp"
        android:layout_margin="4dp">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/blue"
            android:textColor="@color/white"
            android:textAlignment="center"
            android:text="item 1" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/blue"
            android:textColor="@color/white"
            android:textAlignment="center"
            android:text="item 2" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/blue"
            android:textColor="@color/white"
            android:textAlignment="center"
            android:text="item 3" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/blue"
            android:textColor="@color/white"
            android:textAlignment="center"
            android:text="item 4" />
    </ViewFlipper>


    <ViewFlipper
        android:id="@+id/viewFlipper2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/orange"
        android:padding="24dp"
        android:layout_margin="4dp">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/blue"
            android:textColor="@color/white"
            android:textAlignment="center"
            android:text="item 1" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/blue"
            android:textColor="@color/white"
            android:textAlignment="center"
            android:text="item 2" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/blue"
            android:textColor="@color/white"
            android:textAlignment="center"
            android:text="item 3" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/blue"
            android:textColor="@color/white"
            android:textAlignment="center"
            android:text="item 4" />
    </ViewFlipper>

</LinearLayout>

/anim/viewflipper_right_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!--从右到左进入-->
    <translate
        android:duration="2000"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
</set>

/anim/viewflipper_right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <!--从右到左离开-->
    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />
</set>

/anim/viewflipper_left_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <!--从左到右进入-->
    <translate
        android:duration="500"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />
</set>

/anim/viewflipper_left_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!--从左到右离开-->
    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="100%p" />
</set>

项目地址 https://github.com/webabcd/AndroidDemo
作者 webabcd

Android - 解决 ViewFlipper 与 ScrollView 滑动响应事件拦截的问题【转】

Android - 解决 ViewFlipper 与 ScrollView 滑动响应事件拦截的问题【转】

最近在做一个简单的展示界面时,遇到了一个比较棘手的问题。由于要展示多项内容,所以使用 ViewFlipper 作为水平滑动容器;而每项内容中由于许多文本较长,因此需要使用 ScrollView 作为垂直滑动容器。基本的界面布局大致如下:

外部文件 common_list_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/geyan_query_view_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/mid_bg">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="43dip"
android:orientation="vertical"
android:gravity="top"
android:layout_gravity="top">
<Gallery
android:id="@+id/gallery_data"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="top"
android:layout_gravity="top"
android:spacing="60dip"
android:paddingLeft="6dip"
android:paddingRight="6dip"
>
</Gallery>
</LinearLayout>
<ImageView
android:id="@+id/main_background"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<include layout="@layout/common_title_view"
android:id="@+id/title"/>
</RelativeLayout>

内部文件 common_info_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/linear">
<TextView
android:id="@+id/text_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dip"
android:layout_marginTop="5dip"
android:gravity="center"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="#181712"
/>
<ScrollView
android:id="@+id/scroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="5dip"
android:fadeScrollbars="true"
>
<TextView
android:id="@+id/text_detail"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:lineSpacingMultiplier="1.3"
android:textSize="18sp"
android:textColor="#181712"
android:singleLine="false"
/>
</ScrollView>
</LinearLayout>

由于 ViewFlipper 在外,ScrollView 在内,因此一般的做法是定义一个手势响应类来处理响应事件,并将响应事件的处理交给内层的 ScrollView。大致代码如下:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;
 
public class Test1 extends Activity {
 
	private ViewFlipper viewFlipper;
 
	private String[] descriptionsArray;
	private String[] titleArray;
 
	private int selectedPosition;
 
	private TextView textViewTitle;
	private TextView textViewContent;
	private FriendlyScrollView scroll;
 
	private LayoutInflater mInflater;
 
	private GestureDetector gestureDetector;
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
 
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.common_info_list_view);
 
		InitUI();
 
		super.onCreate(savedInstanceState);
 
		Toast.makeText(this, R.string.hello, Toast.LENGTH_SHORT).show();
	}
 
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu);
        return false;
	}
 
	@Override
	public void onBackPressed() {
		// TODO Auto-generated method stub
		finish();
	}
 
	private void InitUI(){
 
		viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper_data);
 
		mInflater = LayoutInflater.from(this);
 
		fillDate();
 
		viewFlipper.addView(getContentView());
	}
 
	private void fillDate(){
		selectedPosition = 0;
 
		titleArray = getResources().getStringArray(R.array.title_array);
		descriptionsArray = getResources().getStringArray(R.array.description_array);
 
		gestureDetector = new GestureDetector(new CommonGestureListener());
	}
 
	private View getContentView() {
		View contentView = new View(this);
		contentView = mInflater.inflate(R.layout.common_info_item_view, null);
 
		textViewTitle = (TextView) contentView.findViewById(R.id.text_title);
		textViewContent = (TextView) contentView.findViewById(R.id.text_detail);
 
		textViewTitle.setText(titleArray[selectedPosition]);
		textViewTitle.setPadding(10, 0, 10, 0);
		textViewContent.setText(descriptionsArray[selectedPosition]);
		textViewContent.setPadding(10, 5, 10, 5);
 
		scroll = (FriendlyScrollView) contentView.findViewById(R.id.scroll);
		scroll.setOnTouchListener(onTouchListener);
		scroll.setGestureDetector(gestureDetector);
 
		return contentView;
	}
 
	private View.OnTouchListener onTouchListener = new View.OnTouchListener() {
 
		public boolean onTouch(View v, MotionEvent event) {
			// TODO Auto-generated method stub
			return gestureDetector.onTouchEvent(event);
		}
	};
 
	public class CommonGestureListener extends SimpleOnGestureListener {
 
		@Override
		public boolean onDown(MotionEvent e) {
			// TODO Auto-generated method stub
			Log.d("QueryViewFlipper", "====> Jieqi: do onDown...");
			return false;
		}
 
		@Override
		public void onShowPress(MotionEvent e) {
			// TODO Auto-generated method stub
			Log.d("QueryViewFlipper", "====> Jieqi: do onShowPress...");
			super.onShowPress(e);
		}
 
		@Override
	    public void onLongPress(MotionEvent e) {
	        // TODO Auto-generated method stub
			Log.d("QueryViewFlipper", "----> Jieqi: do onLongPress...");
	    }
 
		@Override
		public boolean onSingleTapConfirmed(MotionEvent e) {
			// TODO Auto-generated method stub
			Log.d("QueryViewFlipper", "====> Jieqi: do onSingleTapConfirmed...");
			return false;
		}
 
		@Override
		public boolean onSingleTapUp(MotionEvent e) {
			// TODO Auto-generated method stub
			Log.d("QueryViewFlipper", "====> Jieqi: do onSingleTapUp...");
			return false;
		}
 
		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY){
			// TODO Auto-generated method stub
			Log.d("QueryViewFlipper", "====> Jieqi: do onFling...");
			if (e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 50) {
				//向左
				selectedPosition = selectedPosition + 1 < titleArray.length ? (selectedPosition + 1) : 0;
				viewFlipper.addView(getContentView());
				viewFlipper.setInAnimation(AnimationControl.inFromRightAnimation());
                viewFlipper.setOutAnimation(AnimationControl.outToLeftAnimation());
                viewFlipper.showNext();
                viewFlipper.removeViewAt(0);
			} else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 50) {
				//向右
				selectedPosition = selectedPosition > 0 ? (selectedPosition - 1) : (titleArray.length - 1);
				viewFlipper.addView(getContentView());
				viewFlipper.setInAnimation(AnimationControl.inFromLeftAnimation());
                viewFlipper.setOutAnimation(AnimationControl.outToRightAnimation());
				viewFlipper.showNext();
				viewFlipper.removeViewAt(0);
			}
			return true;
		}
 
		@Override
		public boolean onScroll(MotionEvent e1, MotionEvent e2,
				float distanceX, float distanceY) {
			// TODO Auto-generated method stub
			Log.d("QueryViewFlipper", "====> Jieqi: do onScroll...");
			return super.onScroll(e1, e2, distanceX, distanceY);
		}
 
    }
}

这个时候问题出现了,通过 Log 显示,当 ScrollView 中内容太短的时候,ScrollView 不会触发 OnScroll 和 OnFling 事件,导致 ViewFlipper 左右滑动不响应。(当然后来的另一个测试表明这个问题在 ListView 上不存在)
为了解决这一个问题,我重新自定义了一个 FriendlyScrollView 类,来重写 ScrollView 的 onTouchEvent 和 dispatchTouchEvent 方法,具体如下:

import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ScrollView;
 
public class FriendlyScrollView extends ScrollView {
 
	GestureDetector gestureDetector;
 
    public FriendlyScrollView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}
 
	public FriendlyScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}
 
	public FriendlyScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}
 
	public void setGestureDetector(GestureDetector gestureDetector) {
		this.gestureDetector = gestureDetector;
	}
 
	@Override
	public boolean onTouchEvent(MotionEvent event) {
	    super.onTouchEvent(event);
	    return gestureDetector.onTouchEvent(event);
	}
 
	@Override
	public boolean dispatchTouchEvent(MotionEvent ev){
	    gestureDetector.onTouchEvent(ev);
	    super.dispatchTouchEvent(ev);
	    return true;
	} 
 
}

然后将 common_info_view.xml 和程序中的 ScrollView 改成 FriendlyScrollView,终于解决了这个问题。

 

 

 

Android Animation 之 ViewAnimator\ViewFlipper

Android Animation 之 ViewAnimator\ViewFlipper

选自 Android 3.0 Animations Beginners Guide Bring Your Android Applications To Lefe With Stunning Animations

动画 http://stackoverflow.com/questions/5151591/android-left-to-right-slide-animation

Viewpper 是一个为了翻页动画而封装的小类。它使用 tween 动画类,并将它们扩展到 xml 文件。

main.xml

ViewFlipper 有两个属性,android:inAnimation 和 android.outAnimation,可以设置进出动画

<?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="match_parent"
    android:orientation="vertical" >

    <ViewFlipper
        android:id="@+id/pages"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/text_1_1" />

            <ImageView
                android:id="@+id/rollingball"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="60dp"
                android:src="@drawable/ball"
                android:contentDescription="@string/app_name" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/text_1_2" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/text_2_1" />

            <ImageView
                android:id="@+id/bouncingball"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="60dp"
                android:src="@drawable/ball"
                android:contentDescription="@string/app_name" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/text_2_2" />
        </LinearLayout>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/text_3_1" />
    </ViewFlipper>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" >

        <Button
            android:id="@+id/prev"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:drawableLeft="@android:drawable/ic_media_previous"
            android:text="@string/button_prev" />

        <Button
            android:id="@+id/next"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:drawableRight="@android:drawable/ic_media_next"
            android:text="@string/button_next" />
    </LinearLayout>

</LinearLayout>

slidein_to_left.xml     //in from right to left   used by next button

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator" >

    <translate
        android:duration="500"
        android:fromXDelta="100%p"
        android:toXDelta="0" />

</set>

slideout_to_left.xml     //out from right to left used by next button

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />

</set>

slidein_to_right.xml     //in from left to right   used by previous button

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator" >

    <translate
        android:duration="500"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />

</set>

slideout_to_right.xml     //out from left to right   used by previous button

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="100%p" />

</set>

MainActivity.java

package com.animation.interactivebook;

import android.os.Bundle;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
//import android.view.animation.AnimationUtils;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ViewAnimator;

public class InteractiveBook extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		final View rollingBall = findViewById(R.id.rollingball);
		ObjectAnimator ballRoller = ObjectAnimator.ofFloat(rollingBall,
				"TranslationX", 0, 400);
		ballRoller.setDuration(2000);
		ballRoller.setRepeatMode(ObjectAnimator.REVERSE);
		ballRoller.setRepeatCount(ObjectAnimator.INFINITE);
		ballRoller.start();

		final View bouncingBall = findViewById(R.id.bouncingball);
		ValueAnimator ballBouncer = ValueAnimator.ofInt(0, 40);
		ValueAnimator.setFrameDelay(50);
		ballBouncer
				.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
					public void onAnimationUpdate(ValueAnimator ballBouncer) {
						// We''ll fill this out in a minute
						final int animatedValue = (Integer) ballBouncer
								.getAnimatedValue();
						bouncingBall.post(new Runnable() {
							public void run() {
								bouncingBall.setPadding(
										bouncingBall.getPaddingLeft(),
										40 - animatedValue,
										bouncingBall.getPaddingRight(),
										animatedValue);
								bouncingBall.invalidate();
							}
						});
					}
				});
		ballBouncer.setDuration(2000);
		ballBouncer.setRepeatMode(ValueAnimator.REVERSE);
		ballBouncer.setRepeatCount(ValueAnimator.INFINITE);
		ballBouncer.start();

		final AnimationSet slideinToLeft = new AnimationSet(true);
		TranslateAnimation slide1 = new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, 1f, Animation.RELATIVE_TO_PARENT,
				0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0);
		ScaleAnimation scale1 = new ScaleAnimation(10, 1, 10, 1);
		slideinToLeft.addAnimation(slide1);
		slideinToLeft.addAnimation(scale1);
		slideinToLeft.setDuration(1000);

		final AnimationSet slideoutToLeft = new AnimationSet(true);
		TranslateAnimation slide2 = new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
				-1f, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF,
				0);
		ScaleAnimation scale2 = new ScaleAnimation(1, 10, 1, 10);
		slideoutToLeft.addAnimation(slide2);
		slideoutToLeft.addAnimation(scale2);
		slideoutToLeft.setDuration(1000);

		final AnimationSet slideinToRight = new AnimationSet(true);
		TranslateAnimation slide3 = new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, -1f,
				Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_SELF, 0,
				Animation.RELATIVE_TO_SELF, 0);
		ScaleAnimation scale3 = new ScaleAnimation(10, 1, 10, 1);
		slideinToRight.addAnimation(slide3);
		slideinToRight.addAnimation(scale3);
		slideinToRight.setDuration(1000);

		final AnimationSet slideoutToRight = new AnimationSet(true);
		TranslateAnimation slide4 = new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
				1f, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF,
				0);
		ScaleAnimation scale4 = new ScaleAnimation(1, 10, 1, 10);
		slideoutToRight.addAnimation(slide4);
		slideoutToRight.addAnimation(scale4);
		slideoutToRight.setDuration(1000);

		final ViewAnimator pages = (ViewAnimator) findViewById(R.id.pages);
		Button prev = (Button) findViewById(R.id.prev);
		Button next = (Button) findViewById(R.id.next);
		prev.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				// pages.clearAnimation();
				// Animation inAnimation =
				// AnimationUtils.loadAnimation(InteractiveBook.this,
				// R.anim.slidein_to_right);
				// Animation outAnimation =
				// AnimationUtils.loadAnimation(InteractiveBook.this,
				// R.anim.slideout_to_right);
				// pages.setInAnimation(inAnimation);
				// pages.setOutAnimation(outAnimation);
				pages.clearAnimation();
				pages.setInAnimation(slideinToRight);
				pages.setOutAnimation(slideoutToRight);
				pages.showPrevious();
			}
		});
		next.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				// pages.clearAnimation();
				// Animation inAnimation =
				// AnimationUtils.loadAnimation(InteractiveBook.this,
				// R.anim.slidein_to_left);
				// Animation outAnimation =
				// AnimationUtils.loadAnimation(InteractiveBook.this,
				// R.anim.slideout_to_left);
				// pages.setInAnimation(inAnimation);
				// pages.setOutAnimation(outAnimation);
				pages.clearAnimation();
				pages.setInAnimation(slideinToLeft);
				pages.setOutAnimation(slideoutToLeft);
				pages.showNext();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.interactive_book, menu);
		return true;
	}

}


android ViewFlipper

android ViewFlipper

结构

继承关系

public class ViewFlipperextends ViewAnimator

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ViewAnimator

android.widget.ViewFlipper

被添加到ViewFlipper中的两个或两个以上的视图之间将执行一个简单的ViewAnimator动画。一次仅能显示一个子视图。如果需要,可以设置间隔时间使子视图像幻灯片一样自动显示。(译者注:com.example.android.apis.view/Animation_2.java包含该类示例程序)

XML属性

属性名称

描述

android:autoStart

当设为true时,自动启动动画

此时必须是一个布尔值,属性值为truefalse

(对应于全局资源属性R.attr.autoStart

android:flipInterval

显示下一个视图的时间间隔

公共方法

public bool isAutoStart ()

如果视图显示到窗口上时会自动调用startFlipping()方法,则返回true

public bool isFlipping()

如果子视图正在切换,则返回true

public bool setAutoStart (bool autoStart)

设置视图显示到窗口上时是否会自动调用startFlipping()方法

public bool setFlipInterval (int milliseconds)

视图间切换的时间间隔

参数

milliseconds 毫秒数

public bool startFlipping ()

开始在子视图间定时循环切换

public bool stopFlipping ()

停止切换

补充

文章精选

ViewFlipper的使用

android开发ViewFlipper触摸动画

Android 固定物件的進出動畫 (入場/出場) - ViewFlipperblogspot

android手势翻页效果

 

 

 

 

 

 

 

 

android viewFlipper 使用

android viewFlipper 使用

android.widger.viewAnimator类继承至FrameLayout

作用:为FrameLayout里面的View切换提供动画效果。

1.setInAnimation 设置View进入屏幕时候使用动画

2.setOutAnimation 设置View退出屏幕时候使用动画

3.ShowNext 调用该函数来显示FrameLayout里面的下一个View

4.ShowPrevious调用该函数来显示FrameLayout里面的上一个View

一般不适用ViewAnimator 而是用它的两个子类ViewFlipper和ViewSwitcher

ViewFlipper 用来指定FrameLayout内多个View之间的切换效果,可以一次指定也可以每次切换的时候指定单独的效果。

提供以下函数

isFlipping 用来判断View是否正在进行

setFlipInterval 设置View之间的切换的时间间隔

StartFlipping 使用上面设置的时间间隔来切换所有的View,切换会循环的进行

StopFlipping 停止View的切换

ViewSwitcher 特指俩个View之间的切换,通过该类指定一个ViewSwitcher.ViewFactory工程类来创建这俩个View

关于一手遮天 Android - view集合类: ViewFlipper 基础的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android - 解决 ViewFlipper 与 ScrollView 滑动响应事件拦截的问题【转】、Android Animation 之 ViewAnimator\ViewFlipper、android ViewFlipper、android viewFlipper 使用的相关信息,请在本站寻找。

本文标签: