繼上篇未講述完的動畫實例效果,本篇將會全部實現android小種類型動畫的效果,這次為了方便我沒有用xml文件加載,如果追求OO原則可以自行創建XML,根據具體參數自行配置。
四種動畫效果運行圖:
漸變Alpha
拉伸由大到小Scale
移位Translate
旋轉Rotate
本篇重點:定義Gallery組件的屬性信息,通過在res\Values\attrs.xml文件定,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Gallery">
<attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
以上XML屬性信息設置了Gallery組件的背景風格
注意:這個XML一定要放在values下麵,如果將它放在layout目錄下,將無法讀取;
如果設置Gallery數據,我在此就不多說了,您可以在我之前的博客獲得相關的操作方法:http://www.cnblogs.com/TerryBlog/archive/2010/05/17/1737789.html
在這里重點要說的就是以下幾段代碼 :
片段一:
代码
private int mGalleryItemBackGround; //獲取資源ID
public static int[] myImageArray=
{
R.drawable.one,
R.drawable.two,
R.drawable.three,
R.drawable.four,
R.drawable.five,
R.drawable.six
};
private Context mContext;
private int Height;
private int Width;
public ImageAdapter(Context c,int height,int width)
{
mContext=c;
Height=height;
Width=width;
TypedArray ta=c.obtainStyledAttributes(R.styleable.Gallery);
mGalleryItemBackGround=ta.getResourceId(R.styleable.Gallery_android_galleryItemBackground,
0);
ta.recycle();
}
構造函數裏面,帶了一個上下文,一個高度,一個寬度。
參數一:為了防止這個錯误“The method obtainStyledAttributes(int[]) is undefined for the type ImageAdapter”,意思是obtainStyledAttributes()是Context类中的方法,如果将ImageAdapter单独写在一个.java文件中的话,必须在obtainStyledAttributes()方法前加上方法的引用才能解决问题。
參數二三:是為了後面設置圖片的高度和寬度,後方將有介紹。
代碼示意:通過TypedArray或者Gallery組件屬性,然後設置Gallery的背景風格,之后通過TypedArray所得到的對象,設置Gallery組件無無限循環顯示。
片段二:
代码
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ImageView iv=new ImageView(mContext);
iv.setImageResource(myImageArray[position]);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER); //設置圖片的寬高
iv.setLayoutParams(new Gallery.LayoutParams(Width, Height)); //設置圖片的寬高
iv.setBackgroundResource(mGalleryItemBackGround); //通過 上面設置的資源ID設置背景圖
return iv;
}
重寫getView這個方法,設置圖片的資源,之后通過setLayoutParams這個方法用傳進來的高度和寬度設置圖片寬高。
如何獲取屏幕的高度和寬度:
import android.util.DisplayMetrics; //命名空間
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
之后通過dm.heightPixels,dm.widthPixels 的屬性可得到屏幕高度和寬度。
基本工作完畢,現在到了我們的動畫階段,四種動畫定義如下:
代码
private Animation myAnimationAlpha;
private Animation myAnimationScale;
private Animation myAnimationTranslate;
private Animation myAnimationRotate;
myAnimationAlpha=new AlphaAnimation(0.1f, 1.0f);
myAnimationAlpha.setDuration(3000);
myAnimationScale=new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
myAnimationScale.setDuration(3000);
myAnimationTranslate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
myAnimationTranslate.setDuration(3000);
myAnimationRotate=new RotateAnimation(0.0f, +350.0f,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
myAnimationRotate.setDuration(3000);
詳細參數說明請看這里:http://www.cnblogs.com/TerryBlog/archive/2010/05/30/1747311.html
定義好了動畫的顯示方式,就可以在Gallery組件上做動作了,做一個點擊事件監聽,當用戶每點擊一次就執行一次動畫,四種動畫效果就循環交替顯示各自的魅力
代碼如下:
代码
myGallery.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated methsod stub
ImageView ig=(ImageView)arg1;
switch (i) {
case 0:
ig.startAnimation(myAnimationAlpha);
i++;
break;
case 1:
ig.startAnimation(myAnimationScale);
i++;
break;
case 2:
ig.startAnimation(myAnimationTranslate);
i++;
break;
case 3:
ig.startAnimation(myAnimationRotate);
i=0;
break;
default:
break;
}
//ImageAdapter.myImageArray[arg2];
}
});
總結:
一開始看到動畫效果複雜的參數列表,有點關暈,但耐下心來看一下,覺得還是有一定的規律的,掌握好這門動畫課程以后項目上的動畫效果將迎刃而解。
转载出:http://www.cnblogs.com/TerryBlog/archive/2010/05/31/1748628.html
分享到:
相关推荐
本项目源码集合着重展示了如何在Fragment中实现丰富的动画效果,这对于提升应用的用户体验至关重要。下面将详细探讨Fragment动画效果的相关知识点。 1. **Fragment的基本概念**: - Fragment是Android 3.0(API...
7. **动画效果**:为了增加交互的趣味性,项目可能运用了Android的动画系统,如Tween Animation、Property Animation或Lottie动画,使得书本的添加、移除、翻页等动作更加生动。 8. **权限管理**:如果应用需要访问...
本资源包提供了100个Android项目的源码,特别关注于实现多种特效和动画,包括抽屉效果、自定义视图以及输入法的优化。这些源码实例对于学习和提升Android编程技巧非常有帮助,下面将对其中的一些关键知识点进行详细...
这个Android项目源码100套之一的主题是实现搜索关键字的飞入飞出动画,主要涉及以下几个关键知识点: 1. **Android Animation**:Android提供了多种动画机制,如属性动画(Property Animation)、视图动画(View ...
源码是实现翻页效果的关键,通过阅读源码,开发者可以了解翻页效果的实现原理,学习如何运用Android的视图(View)和动画(Animation)机制来构建复杂的交互效果。Java是Android的主要开发语言,因此源码是用Java编写的...
除了上述技术点,该项目可能还涉及到了动画(Animation)、事件传递(Event Handling)和多线程(Multithreading)等方面的知识。例如,小插件在屏幕上的移动可能会用到平移动画,而处理用户的触摸事件则需要理解...
在Android开发中,动画(Animation)是提升用户体验和交互效果的重要手段。Android提供了多种动画机制,包括属性动画(Property Animation)、视图动画(View Animation)和框架动画(Frame Animation)。这篇博客...
8. **动画效果**:为了提升用户体验,LumaQQ可能使用了Android的动画API,如属性动画(Property Animation)或过渡动画(Transition Animation),来实现平滑的过渡效果。 9. **事件总线**:为了实现组件间松耦合的...
这个项目源码提供了一个很好的起点,通过学习和实践,你可以进一步定制和优化这种效果,为你的应用增添独特的魅力。在提供的资源说明.txt文件中,可能包含了更具体的代码示例和实现细节,建议参考学习。
本资源是"计算机专业-Android项目源码100套"系列中的一份,专注于"gallery重叠特效"的实现,对于学习和理解Android UI动态效果设计具有重要价值。下面我们将详细探讨这个项目的知识点。 1. **Gallery组件**: ...
本项目源码的主题是“我也模仿了Path效果,效果更接近iPhone”,这表明开发者尝试在Android应用中实现与Path应用类似的用户界面(UI)动画和交互效果,同时力求与iPhone上的体验保持一致。Path是一款社交网络应用,...
4. **动画效果**:为了提升用户体验,源码可能会包含一些动画效果,如弹出和消失的过渡动画,这是通过Animation或Animator类来实现的。 5. **权限管理**:在处理短信相关的功能时,需要获取读取和发送短信的权限,...
这个源码项目,名为"andorid打地鼠源码",提供了完整的实现,帮助新手了解游戏开发的基本流程和关键技术。让我们深入探讨一下这个项目中的关键知识点。 首先,"andorid打地鼠源码"基于Android Studio,这是一个集成...
- **补间动画(Tween Animation)**:另一种可能用到的动画方式是补间动画,可以用来改变View的平移、旋转、缩放和透明度等属性,实现色子的晃动效果。 2. **事件监听**: - **SensorManager**:Android系统提供...
在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一种浮于当前视图之上的窗口效果,常用于实现类似下拉菜单、提示框等功能。在这个“计算机专业-Android项目源码100套之”中,我们重点探讨的是如何...
本项目源码“Widget炫酷特效 (宏基扇子型效果)”旨在实现一种独特且引人注目的界面设计,类似于蘑菇街和迷尚应用中的商品展示方式。这种效果通常被称为扇形旋转展示,它将多个小图标或图片以扇子展开的形式呈现,既...
本项目“CustomGalleryLikeiPhone(3D相册)”就是这样一个实例,它模仿了苹果iPhone中的3D相册效果,同时也融入了类似蘑菇街和迷尚应用的图片展示方式,为用户提供了一种新颖的浏览体验。 该Android项目的核心知识...
本项目——"基于Android - MyDate 好看的日历",是针对这一需求提供的一种解决方案,其设计灵感可能来源于流行的蘑菇街和迷尚应用中的日历展示方式,具有明显的视觉效果。 在Android平台上,实现自定义日历视图需要...
6. **动画效果(Animation)**: - 为了让泡泡窗口更具动态效果,可能会用到`ObjectAnimator`或`ValueAnimator`来实现平移、缩放、旋转等动画效果。 7. **权限管理(Permission Management)**: - 读取短信内容...