万书网 > 文学作品 > Android从入门到精通 > 第111页

第111页



(3)打开默认创建的MainActivity,在onCreate()方法中,首先获取动画资源文件中创建的动画资源,然后获取要应用动画效果的ImageView,再获取“旋转”按钮,并为该按钮添加单击事件监听器,在重写的onClick()方法中,播放旋转动画。具体代码如下:

final  Animation  rotate=AnimationUtils.loadAnimation(this,  R.anim.anim_rotate);  //获取旋转动画资源



final  Animation  translate=AnimationUtils.loadAnimation(this,  R.anim.anim_translate);  //获取平移动画资源



final  Animation  scale=AnimationUtils.loadAnimation(this,  R.anim.anim_scale);  //获取缩放动画资源



final  Animation  alpha=AnimationUtils.loadAnimation(this,  R.anim.anim_alpha);  //获取透明度变化动画资源



final  ImageView  iv=(ImageView)findViewById(R.id.imageView1);  //获取要应用动画效果的ImageView



Button  button1=(Button)findViewById(R.id.button1);  //获取“旋转”按钮



button1.setOnClickListener(new  OnClickListener()  {





@Override



public  void  onClick(View  v)  {



iv.startAnimation(rotate);  //播放旋转动画





}



});

获取“平移”按钮,并为该按钮添加单击事件监听器,在重写的onClick()方法中,播放平移动画,关键代码如下:

iv.startAnimation(translate);  //播放平移动画

获取“缩放”按钮,并为该按钮添加单击事件监听器,在重写的onClick()方法中,播放缩放动画,关键代码如下:

iv.startAnimation(scale);  //播放缩放动画

获取“透明度渐变”按钮,并为该按钮添加单击事件监听器,在重写的onClick()方法中,播放透明度渐变动画,关键代码如下:

iv.startAnimation(alpha);  //播放透明度渐变动画

运行本实例,单击“旋转”按钮,屏幕中的小猫将旋转,如图9.21所示;单击“平移”按钮,屏幕中的小猫将从屏幕的左侧移动到右侧,再从右侧返回左侧;单击“缩放”按钮,屏幕中的小猫将放大2倍,再恢复为原来的大小;单击“透明度渐变”按钮,屏幕中的小猫将逐渐隐藏,再逐渐显示。



图9.21 旋转图像动画





9.5 经典范例

9.5.1 在GridView中显示SD卡上的全部图片

例9.18   在Eclipse中创建Android项目,名称为9.18,实现在GridView中显示SD卡上的全部图片。(实例位置:光盘\TM\sl\9\9.18)

(1)修改新建项目的res\layout目录下的布局文件main.xml,添加一个id属性为gridView1的GridView组件,并设置其列数为4,也就是每行显示4张图片。关键代码如下:




android:layout_height="match_parent"



android:layout_width="wrap_content"



android:layout_marginTop="10px"



android:horizontalSpacing="3px"



android:verticalSpacing="3px"



android:numColumns="4"



/>

(2)打开默认添加的MainActivity,定义一个用于保存图片路径的List集合对象,关键代码如下:

private  List  imagePath  =  new  ArrayList();  //图片文件的路径

(3)定义一个保存合法的图片文件格式的字符串数组,并编写根据文件路径判断文件是否为图片文件的方法,具体代码如下:

private  static  String[]  imageFormatSet  =  new  String[]  {  "jpg",  "png",  "gif"  };  //合法的图片文件格式



//判断是否为图片文件



private  static  boolean  isImageFile(String  path)  {



for  (String  format  :  imageFormatSet)  {  //遍历数组



if  (path.contains(format))  {  //判断是否为合法的图片文件



return  true;



}



}



return  false;



}

(4)编写getFiles()方法,用于遍历指定路径。在该方法中,采用递归调用的方式来实现遍历指定路径下的全部文件(包括子文件中的文件),关键代码如下:

private  void  getFiles(String  url)  {



File  files  =  new  File(url);  //创建文件对象



File[]  file  =  files.listFiles();



try  {



for  (File  f  :  file)  {  //通过for循环遍历获取到的文件数组



if  (f.isDirectory())  {  //如果是目录,也就是文件夹



getFiles(f.getAbsolutePath());  //递归调用



}  else  {



if  (isImageFile(f.getPath()))  {  //如果是图片文件



imagePath.add(f.getPath());  //将文件的路径添加到List集合中



}



}



}



}  catch  (Exception  e)  {



e.printStackTrace();  //输出异常信息



}



}

(5)在主活动的onCreate()方法中,获得SD卡的路径,并调用getFiles()方法获取SD卡上的全部图片,当SD卡上不存在图片文件时返回。具体代码如下:

String  sdpath  =  Environment.getExternalStorageDirectory()  +  "/";  //获得SD卡的路径



getFiles(sdpath);  //调用getFiles()方法获取SD卡上的全部图片



if(imagePath.size()<1){  //如果不存在图片文件



return;