Android开发之ViewFlipper使用制作相框
今天我们来认识下ViewFlipper,它可以实现在同一个屏幕中的切换效果。最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。在这里,今天就用该控件来制作一个相簿。
照例先来看下运行效果:
图(三)
图(一):当我们运行该项目所得到得记过图;
图(二):当我们单机Next(下一张)按钮所得到的效果图;
图(三):当我们单机Previous(上一张)按钮时所得到的效果图。
下面来为大家讲解,该项目的开发过程,在过程中也会附带一个信息,在这里大家需要使用三张图片,图片随意,保存在图片资源文件夹下。
1、创建一个Android项目,命名为ViewFlipperDemo。
2、在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>
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="1.0" android:duration="500" /> </set>
push_right_in.xml:
<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>
push_right_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="1.0" android:duration="500" /> </set>
3、修改布局文件,该文件很简单,就上下两个按钮,中间一个ViewFilpper,在ViewFlipper中,我们有用了几个LearnLayout,在线性布局中,我们用了一个ImageView用于显示图片。呵呵,具体代码如下:
<?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"> <Button android:text="Next" android:id="@+id/Button_next1" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button> <ViewFlipper android:id="@+id/details" android:layout_width="150px" android:layout_height="200px" android:persistentDrawingCache="animation" android:flipInterval="1000" android:layout_gravity="center"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <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"> <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"> <ImageView android:id="@+id/image3" android:src="@drawable/lenovo" android:layout_width="fill_parent" android:layout_height="wrap_content"> </ImageView> </LinearLayout> </ViewFlipper> <Button android:text="Previous" android:id="@+id/Button_Previous" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button> </LinearLayout>
4、接下来就是主程序文件了,在主文件中,我们实现了两个按钮的单机处理事件!Next显示下一张图片,Previous显示上一张图片。在这里我们只需调用两个函数即可。具体代码如下:
public class TestActivity extends Activity { //声明ViewFlipper private ViewFlipper mViewFlipper; /** Called when the activity is first created. */ @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.details); buttonNext1.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { //设置动画 mViewFlipper.setInAnimation(getApplicationContext(), R.anim.push_left_in); mViewFlipper.setOutAnimation(getApplicationContext(), R.anim.push_left_out); //调用函数,用于显示下一张图片 mViewFlipper.showNext(); } }); //实例化按钮,并注册单击事件 Button ButtonPrevious = (Button) findViewById(R.id.Button_Previous); ButtonPrevious.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { //设置动画 mViewFlipper.setInAnimation(getApplicationContext(), R.anim.push_right_in); mViewFlipper.setOutAnimation(getApplicationContext(), R.anim.push_right_out); //调用函数,用于显示上一张图片 mViewFlipper.showPrevious(); } }); } }
在这里我们有必要说下,该类涉及到得几个动画相关函数:
setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.Animation;一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。
setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。
showNext: 调用该函数来显示FrameLayout里面的下一个View。
showPrevious: 调用该函数来显示FrameLayout里面的上一个View。
5、到此整个项目已经开发完毕,单击执行,便可得到以上效果。
最后, 再提醒下大家几点:
(1)、该项目,我们实现的是单击按钮显示下一张图片或上一张图片,这里我就要问了:“我们可否通过手势在屏幕上的移动来进行图片的切换呢?”;
(2)、该项目,我们实现了三张图片的切换,但是图片好多的话。我们这么在布局中使用图片,也不是一中明智之举。那么,我们该怎样动态加载几十张甚至几百张图片呢?
呵呵,以上疑问,我们留给下篇博客来解决!谢谢大家了!