ViewFlipper继承于ViewAnimator,android.widget.ViewAnimator类继承至FrameLayout,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。
- setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。
- showNext:调用该函数来显示FrameLayout里面的下一个View。
- showPrevious:调用该函数来显示FrameLayout里面的上一个View。
ViewFlipper可以用来指定FrameLayout内多个View之间的切换效果,可以一次指定也可以每次切换的时候都指定单独的效果。该类额外提供了如下几个函数:
XML属性:
属性名称 |
描述 |
android:autoStart |
当设为true时,自动启动动画。此时必须是一个布尔值,属性值为true或false (对应于全局资源属性R.attr.autoStart) |
android:flipInterval |
显示下一个视图的时间间隔 |
- isAutoStart 如果视图显示到窗口上时会自动调用startFlipping()方法,则返回true
- isFlipping:用来判断View切换是否正在进行
- setAutoStart 设置视图显示到窗口上时是否会自动调用startFlipping()方法
- setFilpInterval:设置View之间切换的时间间隔
- startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行
- stopFlipping: 停止View切换
记住,ViewFlipper是继承至FrameLayout的,所以它是一个Layout里面可以放置多个View。在示例中定义一个 ViewFlipper,里面包含三个ViewGroup作为示例的三个屏幕,每个ViewGroup中包含一个按钮和一张图片,点击按钮则显示下一个屏 幕。代码如下(res\layout\main.xml):
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <ViewFlipper android:id="@+id/details"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:persistentDrawingCache="animation"
- android:flipInterval="1000"
- android:inAnimation="@anim/push_left_in"
- android:outAnimation="@anim/push_left_out">
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <Button
- android:text="Next"
- android:id="@+id/Button_next1"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </Button>
- <ImageView
- android:id="@+id/image1"
- android:src="@drawable/dell1"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </ImageView>
- </LinearLayout>
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <Button
- android:text="Next"
- android:id="@+id/Button_next2"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </Button>
- <ImageView
- android:id="@+id/image2"
- android:src="@drawable/lg"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </ImageView>
- </LinearLayout>
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <Button
- android:text="Next"
- android:id="@+id/Button_next3"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </Button>
- <ImageView
- android:id="@+id/image3"
- android:src="@drawable/lenovo"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </ImageView>
- </LinearLayout>
- </ViewFlipper>
- </LinearLayout>
- res\anim\push_left_in.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate
- android:fromXDelta="100%p"
- android:toXDelta="0"
- android:duration="500"/>
- <alpha
- android:fromAlpha="0.0"
- android:toAlpha="1.0"
- android:duration="500" />
- </set>
- res\anim\push_left_out.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate
- android:fromXDelta="0"
- android:toXDelta="-100%p"
- android:duration="500"/>
- <alpha
- android:fromAlpha="1.0"
- android:toAlpha="0.0"
- android:duration="500" />
- </set>
- public class TestActivity extends Activity {
- private ViewFlipper mViewFlipper;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Button buttonNext1 = (Button) findViewById(R.id.Button_next1);
- mViewFlipper = (ViewFlipper) findViewById(R.id.flipper);
- buttonNext1.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- //在layout中定义的属性,也可以在代码中指定
- // mViewFlipper.setInAnimation(getApplicationContext(), R.anim.push_left_in);
- // mViewFlipper.setOutAnimation(getApplicationContext(), R.anim.push_left_out);
- // mViewFlipper.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES); //指定缓存策略
- // mViewFlipper.setFlipInterval(1000);
- mViewFlipper.showPrevious(); //显示前一个视图
- mViewFlipper.showNext();//显示下一个视图
- //调用下面的函数将会循环显示mViewFlipper内的所有View。
- // mViewFlipper.startFlipping(); //启动循环切换
- }
- });
- Button buttonNext2 = (Button) findViewById(R.id.Button_next2);
- buttonNext2.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- mViewFlipper.showNext();
- }
- });
- Button buttonNext3 = (Button) findViewById(R.id.Button_next3);
- buttonNext3.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- mViewFlipper.showNext();
- }
- });
- }
- }
(译者注:与ViewFlipper类相似,但该类不常用,常用其两个子类ImageSwitcher:转换图片时增加动画效果;TextSwitcher: 转换文字时增加动画效果; 其实例见apidemos中ImageSwitcher实例和TextSwitcher实例)
公共方法:
public void addView(View child, int index, ViewGroup.LayoutParams params)——添加一个指定布局参数的子视图
参数:child 添加的子视
index 添加的子视图的索引
params 子视图的布局参数
异常
IllegalStateException 如果切换器中已经包含了两个视图时。
public View getNextView () 返回下一个要显示的视图
返回视图切换之后将要显示出的下一个视图
public void reset () 重置视图转换器(ViewSwitcher)来隐藏所有存在的视图,并使转换器达到一次动画都还没有播放的状态。
public void setFactory (ViewSwitcher.ViewFactory factory)——设置用来生成将在视图转换器中切换的两个视图的工厂。也可以调用两次 addView(android.view.View, int, android.view.ViewGroup.LayoutParams)来替代使用工厂的方法。
可通过实现ViewSwitcher.ViewFactory接口的makeView()方法来添加布局。
文字转换器控件(改变文字时增加一些动画效果)
被用来使屏幕上的label产生动画效果。每当setText(CharSequence)被调用时,TextSwitcher使用动画方式将当前的文字内容消失并显示新的文字内容。
公共方法:
public void setCurrentText (CharSequence text) 设置当前显示的文本视图的文字内容。非动画方式显示。
public void setText (CharSequence text) 设置下一视图的文本内容并切换到下一视图。可以动画的退出当前文本内容,显示下一文本内容。
示例:
public class TextSwitcher1 extends Activity implements ViewSwitcher.ViewFactory,
View.OnClickListener {
private TextSwitcher mSwitcher;
private int mCounter = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text_switcher_1);
mSwitcher = (TextSwitcher) findViewById(R.id.switcher);
// 指定转换器的 ViewSwitcher.ViewFactory
mSwitcher.setFactory(this);
// 设置淡入和淡出的动画效果
Animation in = AnimationUtils.loadAnimation(this,
android.R.anim.fade_in);
Animation out = AnimationUtils.loadAnimation(this,
android.R.anim.fade_out);
mSwitcher.setInAnimation(in);
mSwitcher.setOutAnimation(out);
// 单击一次按钮改变一次文字
Button nextButton = (Button) findViewById(R.id.next);
nextButton.setOnClickListener(this);
updateCounter();
}
public void onClick(View v) {
mCounter++;
updateCounter();
}
private void updateCounter() {
mSwitcher.setText(String.valueOf(mCounter));
}
// 重写 ViewSwitcher.ViewFactory 的 makeView(),返回一个 View
public View makeView() {
TextView t = new TextView(this);
t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
t.setTextSize(36);
return t;
}
}
ImageSwitcher图片切换器
ImageSwitcher是Android中控制图片展示效果的一个控件,每当调用以下方法:
setImageURI(Uri uri):设置图片地址
setImageResource(int resid):设置图片资源库
setImageDrawable(Drawable drawable):绘制图片
ImageSwitcher使用动画方式实现图片之间的切换效果。
示例:
public class ImageSwitcher1 extends Activity implements
AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.image_switcher_1);
//实例化ImageSwitcher
mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
//指定转换器的 ViewSwitcher.ViewFactory
mSwitcher.setFactory(this);
//指定转换的动画效果
mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
Gallery g = (Gallery) findViewById(R.id.gallery);
g.setAdapter(new ImageAdapter(this));
g.setOnItemSelectedListener(this);
}
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
//设置ImageSwitcher显示的图片,将触发图片之间的变化
mSwitcher.setImageResource(mImageIds[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
}
// 重写 ViewSwitcher.ViewFactory 的 makeView(),返回一个 View
public View makeView() {
ImageView i = new ImageView(this);
i.setBackgroundColor(0xFF000000);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
return i;
}
private ImageSwitcher mSwitcher;
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mThumbIds[position]);
i.setAdjustViewBounds(true);
i.setLayoutParams(new Gallery.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
i.setBackgroundResource(R.drawable.picture_frame);
return i;
}
private Context mContext;
}
private Integer[] mThumbIds = {
R.drawable.sample_thumb_0, R.drawable.sample_thumb_1,
R.drawable.sample_thumb_2, R.drawable.sample_thumb_3,
R.drawable.sample_thumb_4, R.drawable.sample_thumb_5,
R.drawable.sample_thumb_6, R.drawable.sample_thumb_7};
private Integer[] mImageIds = {
R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2,
R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7};
}
ViewSwither可以在两个视图间转换时显示动画,一个ViewSwitcher只允许包含两个子视图,且一次仅能显示一个。常用其两个子类ImageSwitcher:转换图片时增加动画效果; TextSwitcher:转换文字时增加动画效果。
相关推荐
ViewFlipper和ViewSwitcher的使用:屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。 通过查看OPhone API文档可以...
在 Android 应用开发中,ViewFlipper 是一个非常有用的布局组件,它可以实现多个视图(View)之间的切换,并且支持手势滑动切换效果,使得用户界面更加生动和交互性更强。ViewFlipper 是从 FrameLayout 派生的,因此...
7. **ViewFlipper/ViewSwitcher**: 在某些情况下,如果需要在多个ListView之间切换并产生自动滚动效果,可以使用ViewFlipper或ViewSwitcher组件。它们支持动画切换,配合适当的滚动逻辑,可以实现自动往上滚动的效果...
- **自定义动画**:开发者可以设置自定义动画,通过`setInAnimation()`和`setOutAnimation()`传入`Animation`对象。常见的动画类型包括AlphaAnimation(透明度变化)、ScaleAnimation(缩放)、RotateAnimation...
2. **ViewFlipper和ViewSwitcher**:这两个是Android提供的内置组件,可以轻松实现视图间的切换,并且可以附加动画效果。 3. **LayoutTransition**:布局过渡动画可以在添加、删除或改变布局内的视图时自动应用动画...
`ViewFlipper`、`ViewSwitcher`和`Animator`等类是`ViewAnimation`的一部分,它们简化了在视图之间切换或添加过渡动画的操作。比如,`ViewFlipper`可以轻松地在多个子视图之间进行翻转动画。 最后,我们来谈谈`...
" /> </LinearLayout> </ViewSwitcher>在上述布局文件中,我们创建了一个LinearLayout作为根布局,它包含一个水平排列的Button对(用于切换View)和一个ViewSwitcher。ViewSwitcher内部包含了两个View:一个...
3. **ViewFlipper与ViewSwitcher**: 这是Android提供的两个布局组件,可以用来实现视图之间的切换,结合动画可以实现简单的3D翻转效果。 4. **SurfaceView与TextureView**: SurfaceView和TextureView是Android中...
4. **ViewFlipper和ViewSwitcher**:这两个视图切换组件可以在用户交互后切换显示的视图,可以用于实现相册页面的翻转效果。但要注意,它们默认只支持2D转换,若要实现3D效果,需要自定义动画。 5. **CardView和...
在Android开发中,动画(Animation)是提升用户体验和视觉效果的重要工具之一。本文将深入探讨如何利用Android的Animation API来实现动态菜单的效果。动态菜单在许多应用中常见,它可以为用户带来更生动、有趣的交互...
5. **使用ViewFlipper或ViewSwitcher**: 这两个组件可以用来切换多个子视图,当一个视图被显示时,其他视图会被隐藏。例如,可以在一个ViewFlipper中添加两个布局,通过`showNext()`或`showPrevious()`方法来切换...
2. **3D转换**: 要实现3D切换效果,开发者通常会使用`ViewFlipper`或`ViewSwitcher`组件,它们内置了切换视图的功能。通过自定义这些组件的`inAnimation`和`outAnimation`,可以实现两个视图之间的平滑过渡。例如,...
- 在不同的布局文件间进行3D旋转,通常涉及到`ViewFlipper`或`ViewSwitcher`组件。 - 这些组件允许在多个子视图间切换,通过`showNext()`或`showPrevious()`方法实现。 - 结合3D旋转动画,可以创建出平滑的过渡...
同时,可能使用了`ViewFlipper`或`ViewSwitcher`等内置组件来帮助切换和动画化不同的视图。 此外,项目中可能还涉及到Android的生命周期管理和状态保存,确保在翻转过程中应用能正确响应屏幕旋转或其他配置变化。...
如果要支持Android API 11以下的版本,可以使用`ViewFlipper`或`ViewSwitcher`结合视图动画来实现类似效果。虽然视图动画没有属性动画那么灵活,但也能达到类似的效果。 通过以上步骤,你可以在Android应用中实现...
对于Android低版本(API 10及以下),由于没有属性动画支持,可以使用`ViewFlipper`或者`ViewSwitcher`配合`ViewFlipper`的`inAnimation`和`outAnimation`属性来模拟3D翻转效果。不过,这种方案无法达到与高版本...
- 可以结合`ViewFlipper`或`ViewSwitcher`组件,自动切换翻转后的图片。 - 结合触摸事件,实现用户手动触发的3D翻转效果。 6. **实践与优化**: - 实际开发中,可以通过调整动画参数(如速度、平滑度)来改善...
它通过一个ViewSwitcher或ViewFlipper组件来实现视图间的切换,这些组件继承自ViewGroup,可以处理多个子视图的显示和隐藏。在ViewFlow内部,它维护了一个视图池,预先加载和缓存了一定数量的视图,这样在用户滑动时...
2. **视图切换**: 可以利用`ViewFlipper`或`ViewSwitcher`来实现不同视图间的切换动画,这些组件提供了内置的滑动、淡入淡出等效果。 3. **帧动画**: 如果需要复杂的序列动画,可以使用`AnimationDrawable`或`...