ViewFlipper and ViewAnimator

今天我们再一起学习另一个功能更强大的视图切换组件 ViewFlipper,它可以在任意视图和视图组合之间切换。在学习之前我们有必要看一下ViewAnimator 对象。

我们制作视图动画时会发现有个ViewAnimator类,这个类的价值我画一个图给大家看就行了:
ViewFlipper <wbr>and <wbr>ViewAnimator
下面我们来看例子:

1、新建一个项目Lesson46_ViewFlipper

2、在main.xml写入下面代码:

1

2

3

4

5

6

7

<?xml version="1.0" encoding="utf-8"?>

<linearlayoutandroid:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">

<viewflipper android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/viewFlipper1">

         <include android:id="@+id/layout1"layout="@layout/layout1"></include>

         <include android:id="@+id/layout2"layout="@layout/layout2"></include>

</viewflipper>

</linearlayout>

这里用到了include标签,学过javaweb的同学很容易理解,这和jsp页面里的include没啥区别。使用include我们可以把一个大的布局文件拆成多个小的文件,使用include,我们可以复用一些常用布局组合

3、另外两个layout1.xmllayout2.xml的代码分别如下:

1

2

3

4

5

<?xml version="1.0" encoding="utf-8"?>

<linearlayoutandroid:layout_height="wrap_content" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/linearLayout1">

         <textview android:layout_height="wrap_content"android:layout_width="fill_parent"android:id="@+id/textView2"android:gravity="center"android:text="apple"android:textsize="20sp">

         </textview>

</linearlayout>

1

2

3

4

5

6

7

<?xml version="1.0" encoding="utf-8"?>

<linearlayoutandroid:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/linearLayout2">

 

         <imageview android:layout_height="wrap_content"android:layout_width="fill_parent"android:id="@+id/imageView1"android:src="@drawable/apple"></imageview>

         <textview android:layout_height="wrap_content"android:layout_width="fill_parent"android:id="@+id/textView2"android:gravity="center"android:text="苹果" android:textsize="20sp">

         </textview>

</linearlayout>

4MainActivity.java的代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

package basic.android.lesson46;

 

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.animation.AnimationUtils;

import android.widget.ViewFlipper;

 

public class MainActivity extends Activity {

         @Override

         public void onCreate(BundlesavedInstanceState){

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.main);

 

                   // 定义ViewFlipper

                   final ViewFlipper vf = (ViewFlipper)findViewById(R.id.viewFlipper1);

 

                   // 设置点击监听器

                   vf.setOnClickListener(newView.OnClickListener(){

                              @Override

                              public void onClick(Viewv){

                                        // 点击读取下一个视图元素

                                        vf.showNext();

                              }

                   });

 

                   // 设置切入动画

                   vf.setInAnimation(AnimationUtils.loadAnimation(getApplicationContext(),android.R.anim.slide_in_left));

                   // 设置切出动画

                   vf.setOutAnimation(AnimationUtils.loadAnimation(getApplicationContext(),android.R.anim.slide_out_right));

 

         }

}

5、编译并运行代码,查看结果:
ViewFlipper <wbr>and <wbr>ViewAnimator


附:

ImageSwitcher AndTextSwitcher 


packagecom.example.android.apis.view; 

importcom.example.android.apis.R; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.Window; 
importandroid.view.animation.AnimationUtils; 
importandroid.widget.AdapterView; 
importandroid.widget.BaseAdapter; 
import android.widget.Gallery; 
importandroid.widget.Gallery.LayoutParams; 
importandroid.widget.ImageSwitcher; 
import android.widget.ImageView; 
importandroid.widget.ViewSwitcher; 


public class ImageSwitcher1 extends Activityimplements 
       AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory{ 

   @Override 
    public voidonCreate(Bundle savedInstanceState){ 
       super.onCreate(savedInstanceState); 
       requestWindowFeature(Window.FEATURE_NO_TITLE); 

       setContentView(R.layout.image_switcher_1); 

       mSwitcher = (ImageSwitcher)findViewById(R.id.switcher); 
       //提供显示图片的地方 
        mSwitcher.setFactory(this); 

      //系统的anim中的fade_in.xml 
       mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, 
               android.R.anim.fade_in)); 
       //系统的anim中的fade_out.xml 
       mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, 
               android.R.anim.fade_out)); 

       Gallery g = (Gallery)findViewById(R.id.gallery); 
       g.setAdapter(newImageAdapter(this)); 
       g.setOnItemSelectedListener(this); 
   

    public voidonItemSelected(AdapterView parent, View v, int position, long id){ 
       mSwitcher.setImageResource(mImageIds[position]); 
   

    public voidonNothingSelected(AdapterView parent){ 
   

//设置ImgaeSwitcher的为IamgeView的变化并且设置其属性,除此之外可以设置第一次加载的时候ImageSwitcher显示的图片默认第一张 
    public ViewmakeView() { 
       ImageView i = newImageView(this); 
       i.setBackgroundColor(0xFF000000); 
       i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       i.setLayoutParams(newImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, 
               LayoutParams.FILL_PARENT)); 
       return i; 
   

    privateImageSwitcher mSwitcher; 

    public classImageAdapter 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, ViewGroupparent) { 
           ImageView i = newImageView(mContext); 

           i.setImageResource(mThumbIds[position]); 
           i.setAdjustViewBounds(true); 
           i.setLayoutParams(newGallery.LayoutParams( 
                   LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
           i.setBackgroundResource(R.drawable.picture_frame); 
           return i; 
       

       private Context mContext; 

   

    privateInteger[] 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}; 

    privateInteger[] 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}; 





//frameworks\base\core\res\res\anim\fade_in.xml 

Java代码  " quality="high"type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer">  收藏代码
  1. <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim/accelerate_interpolator"   
  2.     android:fromAlpha="1.0"  
  3.     android:toAlpha="0.0"  
  4.     android:duration="@android:integer/config_mediumAnimTime"   
  5. />  


//frameworks\base\core\res\res\anim\fade_out.xml 
Java代码  " quality="high"type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer">  收藏代码
  1. <alpha xmlns:android="http://schemas.android.com/apk/res/android"  
  2.         android:interpolator="@anim/decelerate_interpolator"  
  3.         android:fromAlpha="0.0" android:toAlpha="1.0"  
  4.         android:duration="@android:integer/config_longAnimTime" />  


显示效果 
ViewFlipper <wbr>and <wbr>ViewAnimator  

总结 
TextSwitcher与ImageSwitcher差不多,不过ImageSwitcher规定的view为ImageView,而TextSwitcher为TextView。(这个在publicViewmakeView()这个里面设置)。若是ImageSwitcher则在makeView()里面定义的是IamgeView并且将其返回给IamgeSwitcher,而TextSwitcher则在makeView里面定义的是TextView并且将其返回给TextSwitcher.
 
在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值