android studio开发Activity切换动画以及ButterKnife注解简单应用
2015-09-04 19:20
766 查看
最近刚刚换到Android studio进行android开发,好多不顺,不实际应用不行,必须实际操作一遍才可以真正进行android studio下面进行开发。目前写这个 小小的案例进行一个简单的实践。先上效果图:
实现的效果就是两个activity进行切换时候的动画,其实了解的话其实都非常简单,最近MIUI更新版本之后,现在MIUI的启动界面也采用了有底部向上部平移的动画。
整个界面非常简单,两个activity,一个主界面,另一个other界面,启动 销毁进行动画的显示。
xml的布局文件也是简单,就不贴出来了。下面先给出主界面的代码:
代码比较简单,一个Spinner 填装字符串数据,一个button,button相应onclick事件。其中用到了ButterKnife注解,代码跟全部手写要简洁一些。稍后讲解ButterKnife注解的用法。
下面给出启动的otherActivity的代码:
otheractivity代码就一个button,为了应用ButterKnife注解,里面添加了两个点击事件,这两个点击事件使用ButterKnife注解进行设置的。(稍后讲解ButterKnife注解)
activity的切换动画是怎么进行的呢?相信大家看到上面的代码已经注意到了一个方法:overridePendingTransition(R.anim.slide_up_in, R.anim.slide_down_out);
在startActivity()或者finish()方法之后,利用该方法进行activity的切换动画。动画资源就如大家所看到的,在res/anim文件夹下面进行定义。
这个方法的第一个参数是要切换的界面的动画,第二个参数是当前界面的动画。不知道大家能否理解这个话,也就是说,第一个参数定义的动画说明要切换的界面显示的动画,第二个参数定义的动画说明当前界面如何退出的动画。
这里详细说明一两个作为说明:
R.anim.push_up_in
这个动画是从Y轴的底部向Y轴顶部进行平移并且透明度从0到1进行显示的动画,这个动画的效果是让界面显示出来,呈现在用户面前。
R.anim.push_up_out
这个动画与上面向对应,说明的动画效果是界面向上由显示平移到不显示,效果图:
效果图中mainActivity到otherActivity的切换动画代码:
overridePendingTransition(R.anim.push_up_in,
R.anim.push_up_out);
这个代码设置之后到otherActivity的切换动画就如图所示。
返回的动画,是两者的互换!只不过没有了透明度的变化。
下面在介绍其他的几个,
R.anim.scale_rotate
这个动画设置了旋转和缩放,其中要说明的是,android:pivotX和android:pivotY这两个设置的是缩放和旋转的中心,取值从0%-100%之间,50%的值说明是界面的中心。
android:interpolator设置的是动画的加速度,默认线性加速度,一般不作处理,可以利用系统的值,这里就是利用的系统给定的值。
android:fromXScale与android:toXScale设置X轴缩放的起始值和最终显示值。Y轴与之对应。
android:toDegrees设置旋转的角度。
R.anim.my_alpha_action
利用上面两个设置的动画,overridePendingTransition(R.anim.scale_rotate,
R.anim.my_alpha_action);
效果图:
相信到此大家应该明白了动画的设置,其他的动画放大,缩小,平移,旋转等大同小异,最后我会给出代码的下载地址,大家可以详细看看切换动画的定义。
ButterKnife注解
下面说一说ButterKnife注解的用法。代码中使用了改注解,是挺方便的,不过有几个地方需要说明。
这个是build.gradle中的配置,新建好项目之后,里面就改动了一个地方dependencies 添加compile ‘com.jakewharton:butterknife:7.0.0’ 注意:这里的引号里面不要有空格,否则编译不通过。
这里使用的就是android studio的gradle的好处,一句compile就已经把jar包添加进来了,方便。
添加之后进行rebuild project,图:
自动会在external libraries下面显示出来,就可以使用了。
我这里使用的是7.0.0版本,最新的好像是7.0.1版本,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义。同时注册的方式也从
ButterKnife.inject(this);
变成了
ButterKnife.bind(this);
关于7.0.0的ButterKnife的各种用法和功能,可以参考ButterKnife的github上的主页:
http://jakewharton.github.io/butterknife/
这个主页里面详细介绍了该功能的用法。
ButterKnifeZelezny:Android Studio 生成 ButterKnife 注入的插件
该插件我已经安装了,非常方便,省了不少事。效果图:
如何使用?
1、有所使用的布局 ID 上点击右键 (例如上图中的 R.layout.activity_settings ), 然后选择 Generate -> Generate ButterKnife Injections
2、在对话框中选择需要注入的 View, 还有个选项可以给 Adapter 创建一个 ViewHolder。
3、点击 Confirm , 代码自动生成!
项目主页:
https://github.com/inmite/android-butterknife-zelezny
下载插件:
http://plugins.jetbrains.com/plugin/7369
下载插件的安装:
最后给出
项目运行正常。大家如果下载下来之后不能进行运行或者有什么错误,欢迎留言评论,本人会尽快回复的!
实现的效果就是两个activity进行切换时候的动画,其实了解的话其实都非常简单,最近MIUI更新版本之后,现在MIUI的启动界面也采用了有底部向上部平移的动画。
整个界面非常简单,两个activity,一个主界面,另一个other界面,启动 销毁进行动画的显示。
xml的布局文件也是简单,就不贴出来了。下面先给出主界面的代码:
public class MainActivity extends Activity { @Bind(R.id.animation_sp) Spinner mAnimSp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ButterKnife.bind(this); // 通过资源文件获取Spinner填充内容 String[] ls = getResources().getStringArray(R.array.anim_type); List<String> list = new ArrayList<>(); // 把数组内容填充 到集合 for (String str:ls) { list.add(str); } ArrayAdapter<String> animType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, list); animType.setDropDownViewResource(android. R.layout.simple_spinner_dropdown_item); mAnimSp.setAdapter(animType); mAnimSp.setSelection(0); } @OnClick(R.id.other_button) void buttonclick(){ Intent intent = new Intent(); intent.setClass(MainActivity.this, OtherActivity.class); startActivity(intent); switch (mAnimSp.getSelectedItemPosition()) { case 0: /** * 注意:此方法只能在startActivity和finish方法之后调用。 * 第一个参数为第一个Activity离开时的动画, * 第二参数为所进入的Activity的动画效果 */ overridePendingTransition(R.anim.fade, R.anim.hold); break; case 1: overridePendingTransition(R.anim.my_scale_action, R.anim.my_alpha_action); break; case 2: overridePendingTransition(R.anim.scale_rotate, R.anim.my_alpha_action); break; case 3: overridePendingTransition(R.anim.scale_translate_rotate, R.anim.my_alpha_action); break; case 4: overridePendingTransition(R.anim.scale_translate, R.anim.my_alpha_action); break; case 5: overridePendingTransition(R.anim.hyperspace_in, R.anim.hyperspace_out); break; case 6: overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); break; case 7: overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out); break; case 8: overridePendingTransition(R.anim.slide_left, R.anim.slide_right); break; case 9: overridePendingTransition(R.anim.wave_scale, R.anim.my_alpha_action); break; case 10: overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit); break; case 11: overridePendingTransition(R.anim.slide_up_in, R.anim.slide_down_out); break; } } @Override protected void onDestroy() { ButterKnife.unbind(this); super.onDestroy(); } }
代码比较简单,一个Spinner 填装字符串数据,一个button,button相应onclick事件。其中用到了ButterKnife注解,代码跟全部手写要简洁一些。稍后讲解ButterKnife注解的用法。
下面给出启动的otherActivity的代码:
import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.widget.TextView; import android.widget.Toast; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.OnLongClick; public class OtherActivity extends Activity { @Bind(R.id.text) TextView text; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.setContentView(R.layout.other); ButterKnife.setDebug(true); ButterKnife.bind(this); } @OnClick(R.id.text) void click() { Toast.makeText(this, "点击了onclick", Toast.LENGTH_LONG).show(); } @OnLongClick(R.id.text) boolean longclick() { Toast.makeText(this, "点击了onlongclick", Toast.LENGTH_LONG).show(); return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //如果按下的是返回键,并且没有重复 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { finish(); overridePendingTransition(R.anim.slide_up_in, R.anim.slide_down_out); return false; } return false; } @Override protected void onDestroy() { ButterKnife.unbind(this); super.onDestroy(); } }
otheractivity代码就一个button,为了应用ButterKnife注解,里面添加了两个点击事件,这两个点击事件使用ButterKnife注解进行设置的。(稍后讲解ButterKnife注解)
activity的切换动画是怎么进行的呢?相信大家看到上面的代码已经注意到了一个方法:overridePendingTransition(R.anim.slide_up_in, R.anim.slide_down_out);
在startActivity()或者finish()方法之后,利用该方法进行activity的切换动画。动画资源就如大家所看到的,在res/anim文件夹下面进行定义。
这个方法的第一个参数是要切换的界面的动画,第二个参数是当前界面的动画。不知道大家能否理解这个话,也就是说,第一个参数定义的动画说明要切换的界面显示的动画,第二个参数定义的动画说明当前界面如何退出的动画。
这里详细说明一两个作为说明:
R.anim.push_up_in
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="2000" android:fromYDelta="100%p" android:toYDelta="0" /> <alpha android:duration="2000" android:fromAlpha="0.0" android:toAlpha="1.0" /> </set>
这个动画是从Y轴的底部向Y轴顶部进行平移并且透明度从0到1进行显示的动画,这个动画的效果是让界面显示出来,呈现在用户面前。
R.anim.push_up_out
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="2000" android:fromYDelta="0" android:toYDelta="-100%p" /> <alpha android:duration="2000" android:fromAlpha="1.0" android:toAlpha="0.0" /> </set>
这个动画与上面向对应,说明的动画效果是界面向上由显示平移到不显示,效果图:
效果图中mainActivity到otherActivity的切换动画代码:
overridePendingTransition(R.anim.push_up_in,
R.anim.push_up_out);
这个代码设置之后到otherActivity的切换动画就如图所示。
返回的动画,是两者的互换!只不过没有了透明度的变化。
下面在介绍其他的几个,
R.anim.scale_rotate
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <scale android:duration="2000" android:fromXScale="0.0" android:fromYScale="0.0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:repeatCount="0" android:startOffset="20" android:toXScale="1.0" android:toYScale="1.0" > </scale> <rotate android:duration="2000" android:fromDegrees="0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toDegrees="+355" /> </set>
这个动画设置了旋转和缩放,其中要说明的是,android:pivotX和android:pivotY这两个设置的是缩放和旋转的中心,取值从0%-100%之间,50%的值说明是界面的中心。
android:interpolator设置的是动画的加速度,默认线性加速度,一般不作处理,可以利用系统的值,这里就是利用的系统给定的值。
android:fromXScale与android:toXScale设置X轴缩放的起始值和最终显示值。Y轴与之对应。
android:toDegrees设置旋转的角度。
R.anim.my_alpha_action
<?xml version="1.0" encoding="utf-8"?> <!-- android:duration="@android:integer/config_mediumAnimTime" --> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:duration="2000" android:fromAlpha="1.0" android:toAlpha="0" /> <!-- 透明度控制动画效果 alpha 浮点型值: fromAlpha 属性为动画起始时透明度 toAlpha 属性为动画结束时透明度 说明: 0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之间的float数据类型的数字 长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 --> </set>
利用上面两个设置的动画,overridePendingTransition(R.anim.scale_rotate,
R.anim.my_alpha_action);
效果图:
相信到此大家应该明白了动画的设置,其他的动画放大,缩小,平移,旋转等大同小异,最后我会给出代码的下载地址,大家可以详细看看切换动画的定义。
ButterKnife注解
下面说一说ButterKnife注解的用法。代码中使用了改注解,是挺方便的,不过有几个地方需要说明。
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.0" defaultConfig { applicationId "com.husy.test.test" minSdkVersion 11 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.0.0' compile 'com.jakewharton:butterknife:7.0.0' }
这个是build.gradle中的配置,新建好项目之后,里面就改动了一个地方dependencies 添加compile ‘com.jakewharton:butterknife:7.0.0’ 注意:这里的引号里面不要有空格,否则编译不通过。
这里使用的就是android studio的gradle的好处,一句compile就已经把jar包添加进来了,方便。
添加之后进行rebuild project,图:
自动会在external libraries下面显示出来,就可以使用了。
我这里使用的是7.0.0版本,最新的好像是7.0.1版本,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义。同时注册的方式也从
ButterKnife.inject(this);
变成了
ButterKnife.bind(this);
关于7.0.0的ButterKnife的各种用法和功能,可以参考ButterKnife的github上的主页:
http://jakewharton.github.io/butterknife/
这个主页里面详细介绍了该功能的用法。
ButterKnifeZelezny:Android Studio 生成 ButterKnife 注入的插件
该插件我已经安装了,非常方便,省了不少事。效果图:
如何使用?
1、有所使用的布局 ID 上点击右键 (例如上图中的 R.layout.activity_settings ), 然后选择 Generate -> Generate ButterKnife Injections
2、在对话框中选择需要注入的 View, 还有个选项可以给 Adapter 创建一个 ViewHolder。
3、点击 Confirm , 代码自动生成!
项目主页:
https://github.com/inmite/android-butterknife-zelezny
下载插件:
http://plugins.jetbrains.com/plugin/7369
下载插件的安装:
最后给出
源码下载
项目中使用的android studio是目前最新的版本1.4 beta2,jdk1.7项目运行正常。大家如果下载下来之后不能进行运行或者有什么错误,欢迎留言评论,本人会尽快回复的!
相关文章推荐
- Android Studio最新版本(1.3)JNI开发流程总结
- Android一些设计原则杂项
- Android test---SL4A
- Android test---CTS
- Android基本控件RadioGroup和RadioButton学习
- Android控件CheckBox学习
- android Intent 实现跳转 通过注册表
- Android知识点3-通过照相或相册更改图片
- Android 的EditText控件学习
- Android 项目中执行java的main方法
- Android中Handler引起的内存泄露
- Android基本控件TextView学习
- Android实例-设置消息提醒(XE8+小米2)
- android 怎么选择audio hal
- android开发常用网址
- android support Percent支持库开发
- android:contentDescription 的用途
- Android笔记(二十一) Android中的Adapter
- [Android Pro] android 混淆文件project.properties和proguard-project.txt
- 【Android】简单详细的安卓开发环境配置及运行第一个程序Helloworld