Android开发之ViewFlipper使用制作相簿(一)

 

 Android开发之ViewFlipper使用制作相框

今天我们来认识下ViewFlipper,它可以实现在同一个屏幕中的切换效果。最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。在这里,今天就用该控件来制作一个相簿。

照例先来看下运行效果:

Android开发之ViewFlipper使用制作相簿(一)_第1张图片   Android开发之ViewFlipper使用制作相簿(一)_第2张图片
                                               图(一)                                                                                                   图(二)

Android开发之ViewFlipper使用制作相簿(一)_第3张图片

                                          图(三)

图(一):当我们运行该项目所得到得记过图;

图(二):当我们单机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)、该项目,我们实现了三张图片的切换,但是图片好多的话。我们这么在布局中使用图片,也不是一中明智之举。那么,我们该怎样动态加载几十张甚至几百张图片呢?

呵呵,以上疑问,我们留给下篇博客来解决!谢谢大家了!


你可能感兴趣的:(android,layout,Class,animation,button,encoding)