(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
(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;