以上就是给各位分享一手遮天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 - 解决 ViewFlipper 与 ScrollView 滑动响应事件拦截的问题【转】
- Android Animation 之 ViewAnimator\ViewFlipper
- android ViewFlipper
- android viewFlipper 使用
一手遮天 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 滑动响应事件拦截的问题【转】
最近在做一个简单的展示界面时,遇到了一个比较棘手的问题。由于要展示多项内容,所以使用 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 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
结构
继承关系
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时,自动启动动画 此时必须是一个布尔值,属性值为true或false (对应于全局资源属性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 固定物件的進出動畫 (入場/出場) - ViewFlipper(blogspot)
android手势翻页效果
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 使用的相关信息,请在本站寻找。
本文标签: