1. 谷歌推荐android开源库有哪些
ActionBarSherlock : Action Bar是Android 3.0后才开始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的所有平台,而且他会自动的判断是调用原生Action Bar还是使用扩展ActionBar。
Android-ViewPagerIndicator : 这是与ViewPager兼容的一个分页指示器库。分页指示器(Friends 和 Suggested就是分页,而下面蓝色的小条就是指示器,ViewPagerIndicator支持多种样式的指示器。)
NineOldAndroids : NineOldAndroids 将 Honeycomb (Android 3.0) 的动画 API 扩展到了Android 1.0以上。这个库的作者即是 ActionBarSherlock 的作者,也是Android-ViewPagerIndicator 的作者
2. 平常收藏的酷炫的Android开源特效库
现在github上面越来越多大神,开源了各种特效库出来,真的很炫很赞呀,经常看到一些,收藏了不少,项目中总用得着的,统一记录一下,啧啧啧~作为我在上的第一篇文章,哇咔咔咔~很喜欢的UI,小清新,给人一种干净舒服的感觉,哈哈。
1. AndroidViewAnimations 动画效果,提供了各种类型的动画效果
2. material-ripple 点击波纹效果,让指定View显示Material Ripple 效果的控件,适用于所有的view
3. MaterialEditText Material Design风格的输入框控件,可以设置图标,支持悬浮文字提示
4. MaterialViewPager Material 风格的ViewPager库
5. Android圆形进度按钮,有时候项目中经常有一些圆形的按钮啊,还要自己在drawable中写个xml文件来给自己的按钮设置背景,有了这个真的是方便很多耶
6. MaterialDateTimePicker 日期选择器,Material风格,很漂亮,包括日历选择器和时间选择器,很强大
7. SCViewPager 引导页,每个应用都有引导页吧,很方便,很好用
8. AndroidImageSlider Android的图像滑块 ,一个多姿势的轮播组件
9. MaterialSearchView 非常漂亮的Material搜索视图
10. material-dialogs
11. material-calendarview 日历视图
12. NiftyDialogEffects 高颜值的动画效果的Dialog
13. Android-PickerView 仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果
14. BottomNavigation 底部导航栏,很酷炫哟~
15. InfiniteCycleViewPager 一个有趣的ViewPager,超级酷炫
16. RecyclerViewCardGallery RecyclerView实现Card Gallery效果,替代ViewPager方案。能够快速滑动并最终定位到居中位置
17. WaveSideBar 一个效果非常酷炫的索引侧边栏
18. 3dTagCloudAndroid 一个完全基于Android ViewGroup编写的控件,支持将一组View展示为一个3D球形集合,并支持全方向滚动
19. AndroidTagView
20. VideoListPlayer 实现了在列表控件(ListView, RecyclerView)中加载并播放视频,并支持滑动时自动播放/暂停的功能, 利用该项目,可以轻松实现类似Instagram的视频播放功能
21. EditTextFirework-Demo 一个绚丽易用的输入框烟花效果,模仿网页360搜索框
22. Android-SpinKit Android 加载动画库
3. 安卓开源的android-FlipView,了解的请帮忙
1.ActionBarSherlock
ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式。
对于Android
4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有ActionBar功能的版本,基于Ice
Cream
Sandwich的自定义动作栏实现将自动围绕布局。能够让开发者轻松开发一款带动作栏(Action
bar)的应用,并且适用于Android 2.x及其以上所有版本。
2.facebook-android-sdk
Facebook SDK for Android是一个开源库,允许开发者将Facebook集成到所开发的Android应用中。
3.SlidingMenu(SlidingMenu
Demos)
SlidingMenu是一个开源的Android库,能够让开发者轻松开发一款应用,实现类似于Google+、Youtube和Facebook应用中非常流行的滑动式菜单。
使用SlidingMenu的Android应用:
Foursquare
Rdio
Plume
VLC for Android
ESPN ScoreCenter
MLS MatchDay
9GAG
Wunderlist 2
The Verge
MTG Familiar
Mantano Reader
Falcon Pro (BETA)
MW3 Barracks
4. cocos2d-x
在移动开发领域,将Cocos2D-X用于主流iOS/Android游戏开发的公司、开发团队多不胜数。cocos2d-x是一个开源的支持多平台的2D游戏框架,使用C++开发,基于cocos2d-iphone,在MIT许可证下发布。主分支在GitHub上使用OpenGL
ES 2.0渲染,而旧版gles11分支则使用OpenGL ES 1.1渲染。
支持iOS、Android、Windows Phone
8、Bada、BlackBerry、Marmalade、Windows、Linux等多个平台。支持C++、Lua、javaScript编程语言。
5. android
GitHub Android App是GitHub开源的Android客户端,支持Issues、Gists,并集成了新闻Feed,能够让你及时跟进组织及关注的开发者、库等。同时,该应用还提供了一个用户快速访问你所创建、监控及发布issue的面板,可查看并将问题加入到收藏夹,可对标签、里程碑和任务进行过滤配置。
android资源库包含了GitHub Android App的所有源代码。
6.Android-ViewPagerIndicator
ViewPager指针项目,在使用ViewPager的时候能够指示ViewPager所在的位置,就像Google
Play中切换的效果一样,还能使用在应用初始化的介绍页面。
兼容Android支持库的ViewPager及ActionBarSherlock,最初是基于Patrik
Åkerfeldt的ViewFlow。
7. MonoGame
MonoGame是一个Microsoft XNA 4.x
Framework的开源跨平台实现。用于让XNA开发者将他们在Xbox 360、Windows &
Windows Phone上开发的游戏移植到iOS、Android、Mac OS X、Linux及Windows 8
Metro上,目前,PlayStation Mobile & Raspberry PI的开发正在进行中。
8.Android-PullToRefresh
该项目用于为Android提供一个可重用的下拉刷新部件。它最初来源于Johan
Nilsson的库(主要是图形、字符串和动画),但这些后来都已被取代。
9. android-async-http
android-async-http是Android上的一个异步、基于回调的HTTP客户端开发包,建立在Apache的HttpClient库上。
10.Android-Universal-Image-Loader
Android上最让人头疼的莫过于从网络获取图片、显示、回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你。
Universal Image Loader for
Android的目的是为了实现异步的网络图片加载、缓存及显示,支持多线程异步加载。它最初来源于Fedor
Vlasov的项目,且自此之后,经过大规模的重构和改进。
11. GreenDroid
GreenDroid最初是由Cyril
Mottier发起,是一个Android的UI开发类库,能够让UI开发更加简便,并且在应用中始终保持一致。
12. Anki-Android
AnkiDroid是一个免费、开源的Android的闪存应用,可直接从Google
Play进行下载。
13.android-actionbar
Action
bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。在大多数的情况下,当开发者需要突出展现用户行为或在全局导航的activity中使用action
bar,因为action
bar能够使应用程序给用户提供一致的界面,且系统能够很好地根据不同的屏幕配置来适应操作栏的外观。
Action bar的主要目的:
提供一个用于识别应用程序的标示和用户的位置的专用空间。
在不同的应用程序之间提供一致的导航和视觉体验。
突出Activity的关键操作,并且在可预见的方法内给用户提供快捷的访问。
14.android-viewflow
android-viewflow是Android平台上的一个视图切换的效果库,ViewFlow相当于Android
UI部件提供水平滚动的ViewGroup,使用Adapter进行条目绑定。
15.android-mapviewballoons
当使用Android地图外部库(com.google.android.maps)时,android-mapviewballoons会提供一个简单的方式来对地图覆盖进行标注,就是一个简单的信息气泡。
它由BalloonOverlayView组成,是一个代表显示你的MapView及BalloonIt www.hbbz08.com emizedOverlay的气泡的视图,BalloonItemizedOverlay是ItemizedOverlay的一个抽象扩展。
16.PushSharp
一个向iOS(iPhone/iPad APNS)、Android(C2DM和GCM)、Windows
Phone和Windows 8设备发送推送通知的服务器端库。
17.androidannotations
Android Annotations是一个开源的框架,用于加速
Android应用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性。
18.HockeyKit
Hockey是一个iOS Ad-Hoc自动更新框架。苹果App
Store中的所有App都可以使用它,它能够显着地提高Beta测试的整个过程,分为两部分:服务器和客户端框架。服务器组件需要所有脚本,但在没有客户端库的情况下,也可以单独工作。它提供一个Web接口,Beta测试者可以使用它来安装最新的AdHoc配置文件,也可以直接在设备上通过Safari安装最新的Beta版本。
只需在服务器上安装一次服务端,就可以处理包标识符不同的多个应用程序(有开发者强烈建议对Debug、AdHoc Beta和AppStore发布版使用不同的包标识符)。
默认当App启动或唤醒时,客户端会从服务器检测更新,用户可以在设置对话框中进行修改:一天一次或手动检查更新。
除了支持iOS,HokeyKit也支持Android平台, 不过Android版还处在Alpha阶段,支持OTA及应用内更新。
为HockeyKit用户提供服务器托管服务。
19.android-menudrawer
Android上的菜单展示风格各异,其中用得最多且体验最好的莫过于左右滑动来显示隐藏的菜单,android-menudrawer是一个滑动式菜单实现,允许用户在应用当中实现无缝导航。该项目具有多种菜单展示效果,其中最常见的就是通过屏幕边缘拖动或点击动作栏的“向上”按钮显示。
4. android开发框架有哪些
1、Rajawali
介绍:
安卓的OpenGL ES 2.0/3.0 引擎。可以用于制作普通应用或者动态壁纸,当然也可以用于制作游戏。
项目地址: https://github.com/Rajawali/Rajawali
2、RxAndroid
介绍:
RxAndroid是RxJava的一个针对Android平台的扩展。它包含了一些能够简化Android开发的工具。
项目地址: https://github.com/ReactiveX/RxAndroid
3、Paginize
介绍:
Paginize 是一个轻量级的UI框架,使用注解来注入布局和view,除了使用注解之外,该框架还有两个特色:1.用Page的概念来取代Fragment,2.切换page时自带ios风格的动画效果。
项目地址: https://github.com/neevek/Paginize
4、otto
介绍:
Otto 是square公司出的一个事件库(pub/sub模式),用来简化应用程序组件之间的通讯。 Otto 修改自Google的Guava库,专门为Android平台进行了优化。
项目地址: https://github.com/square/otto
5 、rebound
介绍:
rebound是facebook的开源动画库。可以认为这个动画库是独立于android Framework之外的一种动画实现。
项目地址: https://github.com/facebook/rebound
6、KJFrameForAndroid
介绍:
KJFrameForAndroid 又叫KJLibrary,是一个帮助快速开发的框架。使用KJFrameForAndroid,你可以只用一行代码就完成http请求、网络图片加载、数据库数据保存或读取。
项目地址: https://github.com/kymjs/KJFrameForAndroid
7、xUtils
介绍:
xUtils
包含了很多实用的android工具。 xUtils
支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls
最低兼容android 2.2 (api level 8)
项目地址: https://github.com/wyouflf/xUtils
目前xUtils主要有四大模块:
DbUtils模块:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
ViewUtils模块:
android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
HttpUtils模块:
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
BitmapUtils模块:
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
8、butterknife-view
注入工具
介绍:
为了减少频繁的调用findViewById(R.id...),可以采用一些注入框架,可以简化自己的代码,让你更专注于实际的功能开发,butterknife就是这样的一个框架,他是jakewharton大神的作品,值得一试。
class ExampleActivity extends Activity {
@InjectView(R.id.title) TextView title;
@InjectView(R.id.subtitle) TextView subtitle;
@InjectView(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.inject(this);
// TODO Use "injected" views...
}
}
这是博客地址:
http://jakewharton.github.io/butterknife/
项目地址: https://github.com/JakeWharton/butterknife
9、cube-sdk
一淘推出的开发框架
介绍:
cube一个Android开发包, 可极大提高你的开发效率。主要提供了图片加载以及网络请求方面的api功能。
项目地址: https://github.com/etao-open-source/cube-sdk
他们的网站:http://cube-sdk.liaohuqiu.net/cn/
10、ASimpleCache
一个简单的缓存框架
介绍:
ASimpleCache
是一个为android制定的 轻量级的 开源缓存框架。轻量到只有一个java文件(由十几个类精简而来)。
它可以缓存什么东西?普通的字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java对象,和
byte数据。
项目地址: https://github.com/yangfuhai/ASimpleCache
11、androidannotations
介绍:
AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。
使代码更加精简,使项目更加容易维护,它的目标就是“Fast Android Development.Easy maintainance”。
通过一段时间的使用发现,相比原生的Android开发,确实能够让你少些很多代码
项目地址: https://github.com/excilys/androidannotations
12、Event Bus
解耦android模块
介绍:
当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越困难。如何优雅地解决这个问题?这时候,就需要使用到EventBus。
EventBus是GreenRobot出品的Android系统的一个Event
Bus类库,使用起来和之前我们所介绍的Square的Otto差不多,都是用来简化应用组件之间的通信。
项目地址: https://github.com/greenrobot/EventBus
13、BeeFramework_Android
介绍:
BeeFramework
Android版主要为Android初级开发人员提供一个基于MVC开发模式的APP DEMO,并提供一套APP内调试工具,包括
查看网络数据请求历史 Crash Log列表 真机WIFI环境下模拟2G\3G网络 查看APP性能(内存占用,CPU占用等)
项目地址: https://github.com/BeeFramework/BeeFramework_Android
14、afinal
介绍:
Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。
Afinal里面目前包含了四大组件:
FinalHttp:用于请求http数据,直接ajax方式请求,文件上传, 断点续传下载文件等
FinalBitmap:用于显示bitmap图片,而无需考虑线程并发和oom等问题。
FinalActivity:完全可以通过注解方式绑定控件和事件,无需编写代码。
FinalDb:android中sqlite的orm框架,一行代码搞定增删改查。
Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。详情请通过以下网址查看。
项目地址: https://github.com/yangfuhai/afinal
15、Volley
介绍:
在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google
I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
项目地址: https://github.com/mcxiaoke/android-volley
5. 安卓setscalex有没有改变view的属性
ViewPagerTransforms
是一个自定义了各种翻转效果的开源库,其中的各种PageTransformer使用了view的很多属性设置方法如DepthPageTransformer中:
package com.ToxicBakery.viewpager.transforms;
import android.view.View;
public class DepthPageTransformer extends ABaseTransformer {
private static final float MIN_SCALE = 0.75f;
@Override
protected void onTransform(View view, float position) {
if (position <= 0f) {
view.setTranslationX(0f);
view.setScaleX(1f);
view.setScaleY(1f);
} else if (position <= 1f) {
final float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setAlpha(1 - position);
view.setPivotY(0.5f * view.getHeight());
view.setTranslationX(view.getWidth() * -position);
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
}
}
@Override
protected boolean isPagingEnabled() {
return true;
}
}
类似于view.setAlpha(1 - position);这样的一些方法是在api
11属性动画出来之后才有的,因此在2.3的手机中无法调用,但是如果我们需要设置一个view的属性,比如透明度,不调用view.setAlpha的话很难完美的用其他方法实现,有文章说用
convertView.getBackground().setAlpha(80);可以实现改变透明度,但是其实那不是改变view的透明度。
如何解决这个问题呢,改变view的透明度怎么这么难?
所幸的是nineoldandroids的工具类ViewHelper帮我们解决了这个问题。
nineoldandroids是一个帮助在2.x的版本中实现属性动画的开源库,现在它的应用已经很广泛了
是一个非常成熟的库,如果没有它android中非常实用的属性动画很难普及开来。
虽然nineoldandroids是为动画而生的,但是为了解2.x版本不能使用属性设置方法的问题nineoldandroids提供了一种通过包装(wrap)view的方式来兼容setScaleY,setAlpha这些方法,要在2.x版本中使用view.setAlpha()方法,可以这样做:
1.引入nineoldandroids的库文件或者jar包,建议引入jar包因为nineoldandroids已经很稳定不需要你去修改。
2.import
com.nineoldandroids.view.ViewHelper同时将上面的代码改为:
public class DepthPageTransformer extends BaseTransformer {
private static final float MIN_SCALE = 0.75f;
@Override
protected void onTransform(View view, float position) {
if (position <= 0f) {
ViewHelper.setTranslationX(view,0f);
ViewHelper.setScaleX(view,1f);
ViewHelper.setScaleY(view,1f);
} else if (position <= 1f) {
final float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));
ViewHelper.setAlpha(view,1-position);
ViewHelper.setPivotY(view,0.5f * view.getHeight());
ViewHelper.setTranslationX(view,view.getWidth() * - position);
ViewHelper.setScaleX(view,scaleFactor);
ViewHelper.setScaleY(view,scaleFactor);
}
}
@Override
protected boolean isPagingEnabled() {
return true;
}
}
6. android中的动画有哪几类
在Android3.0(即API Level11)以前,Android仅支持2种动画:分别是Frame Animation(逐帧动画)和Tween Animation(补间动画),在3.0之后Android支持了一种新的动画系统,称为:Property Animation(属性动画)。
一、Frame Animation:(逐帧动画)
这个很好理解,一帧帧的播放图片,利用人眼视觉残留原理,给我们带来动画的感觉。它的原理的GIF图片、电影播放原理一样。
1.定义逐帧动画比较简单,只要在中使用子元素定义所有播放帧即可。
(1) android:oneshot 设置是否仅播放一次
(2) android:drawable 设置每一帧图片
(3) android:ration 设置图片间切换间隔
2.习惯上把AnimationDrawable设置为ImageView的背景
android:background=@anim/frame_anim
然后我们就可以在java代码中获取AnimationDrawable对象了
AnimationDrawable anim = (AnimationDrawable)imageView.getBackground();
(需要注意的是,AnimationDrawable默认是不播放的,调用其start()方法开始播放,stop停止播放)
3.上面的动画文件是通过xml文件来配置的,如果你喜欢,也可以通过在java代码中创建AnimationDrawable对象,然后通过addFrame(Drawable frame, int ration)方法向动画添加帧,然后start()。。。
二、Tween Animation:(补间动画)
补间动画就是我们只需指定开始、结束的“关键帧“,而变化中的其他帧由系统来计算,不必自己一帧帧的去定义。
1. Android使用Animation代表抽象动画,包括四种子类:AlphaAnimation(透明度动画)、ScaleAnimation(缩放动画)、TranslateAnimation(位移动画)、RotateAnimation(透明度动画)。Android里面允许在java中创建Animation类对象,但是一般都会采用动画资源文件来定义动画,把界面与逻辑分离
<set android:interpolator="@android:anim/linear_interpolator" xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 定义透明度的变换 -->
<!-- 定义旋转变换 -->
<rotate android:ration="3000/" android:fromdegrees="0" android:pivotx="50%" android:pivoty="50%" android:todegrees="1800">
</rotate></alpha></set>
(一个set可以同时定义多个动画,一起执行。)
2. android:interpolator=@android:anim/linear_interpolator控制动画期间需要补入多少帧,简单来说就是控制动画速度,有些地方翻译为“插值“。Interpolator有几种实现类:LinearInterpolator、AccelerateInterpolator、、CycleInterpolator、DecelerateInterpolator,具体使用可以参考官方API Demo。
3. 定义好anim文件后,我们可以通过AnimationUtils工具类来加载它们,加载成功后返回一个Animation。然后就可以通过View的startAnimation(anim)开始执行动画了。
Animation anim = AnimationUtils.loadAnimation(this, R.anim.anim);
//设置动画结束后保留结束状态
anim.setFillAfter(true);
//设置插值效果
anim.setInterpolator(interpolator);
//对view执行动画
view. startAnimation(anim);
三、Property Animation:(属性动画)
属性动画,这个是在Android 3.0中才引进的,它可以直接更改我们对象的属性。在上面提到的Tween Animation中,只是更改View的绘画效果而View的真实属性是不改变的。假设你用Tween动画将一个Button从左边移到右边,无论你怎么点击移动后的Button,他都没有反应。而当你点击移动前Button的位置时才有反应,因为Button的位置属性木有改变。而Property Animation则可以直接改变View对象的属性值,这样可以让我们少做一些处理工作,提高效率与代码的可读性。
(1)ValueAnimator:包含Property Animation动画的所有核心功能,如动画时间,开始、结束属性值,相应时间属性值计算方法等。应用ValueAnimator有两个步骤
1计算属性值。
2根据属性值执行相应的动作,如改变对象的某一属性。
我们的主是第二步,需要实现ValueAnimator.onUpdateListener接口,这个接口只有一个函数onAnimationUpdate(),将要改变View对象属性的事情在该接口中do。
animation.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//do your work
}
});
(2)ObjectAnimator:继承自ValueAnimator,要指定一个对象及该对象的一个属性,当属性值计算完成时自动设置为该对象的相应属性,即完成了Property Animation的全部两步操作。实际应用中一般都会用ObjectAnimator来改变某一对象的某一属性,但用ObjectAnimator有一定的限制,要想使用ObjectAnimator,应该满足以下条件:
1.对象应该有一个setter函数:set(驼峰命名法)
2如下面的例子,像ofFloat之类的工场方法,第一个参数为对象名,第二个为属性名,后面的参数为可变参数,如果values…参数只设置了一个值的话,那么会假定为目的值,属性值的变化范围为当前值到目的值,为了获得当前值,该对象要有相应属性的getter方法:get
3如果有getter方法,其应返回值类型应与相应的setter方法的参数类型一致。
ObjectAnimator oa=ObjectAnimator.ofFloat(tv, alpha, 0f, 1f);
oa.setDuration(3000);
oa.start();
如果不满足上面的条件,我们只能乖乖的使用ValueAnimator来创建动画。
(3)Animator.AnimatorListener:可以为Animator设置动画监听,需要重写下面四个方法。
onAnimationStart()
onAnimationEnd()
onAnimationRepeat()
onAnimationCancel()
这里我们也可以实现AnimatorListenerAdapter,他的好处是可以只用定义想监听的事件而不用实现每个函数却只定义一空函数体。如下:
anim.addListener(new AnimatorListenerAdapter() {
public void on AnimationEnd(Animator animation){
//do your work
}
});
(4)AnimationSet:可以组合多个动画共同工作
AnimatorSet bouncer = new AnimatorSet();
bouncer.play(anim1).before(anim2);
bouncer.play(anim2).with(anim3);
bouncer.play(anim2).with(anim4)
bouncer.play(anim5).after(amin2);
animatorSet.start();
上面的代码意思是: 首先播放anim1;同时播放anim2,anim3,anim4;最后播放anim5。
(5)TimeInterplator:与Tween中的interpolator类似。有以下几种
AccelerateInterpolator 加速,开始时慢中间加速
DecelerateInterpolator 减速,开始时快然后减速
先加速后减速,开始结束时慢,中间加速
AnticipateInterpolator 反向 ,先向相反方向改变一段再加速播放
反向加回弹,先向相反方向改变,再加速播放,会超出目的值然后缓慢移动至目的值
BounceInterpolator 跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100
CycleIinterpolator 循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2 * mCycles * Math.PI * input)
LinearInterpolator 线性,线性均匀改变
OvershottInterpolator 回弹,最后超出目的值然后缓慢改变到目的值
TimeInterpolator 一个接口,允许你自定义interpolator,以上几个都是实现了这个接口
(6)Keyframes:可以让我们定义除了开始和结束以外的关键帧。KeyFrame是抽象类,要通过ofInt(),ofFloat(),ofObject()获得适当的KeyFrame,然后通过PropertyValuesHolder.ofKeyframe获得PropertyValuesHolder对象,如下:
Keyframe kf0 = Keyframe.ofInt(0, 400);
Keyframe kf1 = Keyframe.ofInt(0.25f, 200);
Keyframe kf2 = Keyframe.ofInt(0.5f, 400);
Keyframe kf4 = Keyframe.ofInt(0.75f, 100);
Keyframe kf3 = Keyframe.ofInt(1f, 500);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(width, kf0, kf1, kf2, kf4, kf3);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(btn, pvhRotation);
上述代码的意思是:设置btn对象的width属性值使其:开始时 Width=400,动画开始1/4时 Width=200,动画开始1/2时 Width=400,动画开始3/4时 Width=100,动画结束时 Width=500。
(7)ViewPropertyAnimator:对一个View同时改变多种属性,非常推荐用这种。该类对多属性动画进行了优化,会合并一些invalidate()来减少刷新视图。而且使用起来非常简便,但是要求API LEVEL 12,即Android 3.1以上。仅需要一行代码即可完成水平、竖直移动
myView.animate().translationX(50f). translationY(100f);
(8)常需要改变的一些属性:
translationX,translationY: View相对于原始位置的偏移量
rotation,rotationX,rotationY: 旋转,rotation用于2D旋转角度,3D中用到后两个
scaleX,scaleY: 缩放比
x,y: View的最终坐标,是View的left,top位置加上translationX,translationY
alpha: 透明度
四、最后自己总结一下这三种动画的优缺点:
(1)Frame Animation(帧动画)主要用于播放一帧帧准备好的图片,类似GIF图片,优点是使用简单方便、缺点是需要事先准备好每一帧图片;
(2)Tween Animation(补间动画)仅需定义开始与结束的关键帧,而变化的中间帧由系统补上,优点是不用准备每一帧,缺点是只改变了对象绘制,而没有改变View本身属性。因此如果改变了按钮的位置,还是需要点击原来按钮所在位置才有效。
(3)Property Animation(属性动画)是3.0后推出的动画,优点是使用简单、降低实现的复杂度、直接更改对象的属性、几乎可适用于任何对象而仅非View类,缺点是需要3.0以上的API支持,限制较大!但是目前国外有个开源库,可以提供低版本支持!
7. 有用过NineOldAndroids的吗
做Android开发的同学很多都知道或者使用过一个动画库,那就是NineOldAndroids,它的作者及其牛X,好几个着名的开源库都是他的作品,具体大家可以看他的 JakeWharton 。简单来说,NineOldAndroids是一个向下兼容的动画库,主要是使低于API 11的系统也能够使用View的属性动画。以下是个其官网的简述 :
Android library for using the Honeycomb (Android 3.0) animation API on all versions of the platform back to 1.0!Animation prior to Honeycomb was very limited in what it could accomplish so in Android 3.x a new API was written. With only a change in imports, we are able to use a large subset of the new-style animation with exactly the same API.
View的属性动画在Android API 11及其以后才支持,该库的作用就是让API 11以下的系统也能够正常的使用属性动画。它的类名、用法与官方的都一样,只是包名不一样。使用该库,你就可以在API 版本很低的情况下也能够使用各种属性动画,让你的应用更加有动感、平滑。 官方地址 : nineoldandroids 。
基本原理简介
一般来说,我们使用NineOldAndroids的属性动画时的代码大致是如下这样的:
ValueAnimator colorAnim = ObjectAnimator.ofFloat(myView, "scaleX", 0.3f);colorAnim.setDuration(1000);colorAnim.start();
这个动画会将myView (View的子类型)的宽度在1秒钟之内缩放到原始宽度的30%。下面我们先来简单说明一下NineOldAndroids的基本原理。
不管是官方的支持,还是nideoldandroids的低版本支持,它们使用的技术原理都是一样的。NineOldAndroids的基本原理就是在构建属性动画时根据用户的系统版本来选择不同的实现方式,并且对于低版本的API使用自己的实现来做属性动画。如果用户的系统API大于等于11,即Android 3.0及其以上,那么就会在动画的ration期间内连续地通过反射来调用该属性的set方法来修改它的值。例如上面的 scaleX属性,该动画库会在内部构造 scaleX 的set方法,格式如下为set + 首字母大写属性名 + 参数,例如setS caleX (float scale),这样在一段时间内连续的修改myView的缩放值就达到了动画的效果。我们看setScaleX的文档:
8. 大神推荐一个好用的Android API!!
那方面的api????
------------------
软件库的存在使得Android编码更方便快捷。在如此多 Android库中,我们该如何寻找最合适的一款呢?下面我们做了一个列表供你参考。
动画(Animation)
Android View Animations:强大的动画库,通过对它的使用,可以轻松创建各种动画效果。
RecyclerView Animators:允许操作者使用含炫酷动画效果的RecyclerView类。
APIs
CloudRail:帮助操作者更快地进行API集成服务。它将多个服务(例如Dropbox,Google Drive和OneDrive)捆绑成一个统一的API。此外,它可自动处理API更新,并保持API的代码一致。其接口可用于云存储,社交,支付等。
Retrofit:Retrofit由Square公司开发,是Android的REST客户端,其类型安全,可将http API转换成Java接口。
图表(Charts)
MPAndroidChart:一款强大的图表生成库,可在Android上生成图表,同时还提供8种不同的图表类型和多种手势。
AndroidCharts:一款简单的图表创建工具,具有自定义的功能。
数据库(Database)
SQLBrite: 围绕SQLiteOpenHelper和ContentResolver创建封装,以在查询中使用流式语义。
Sugar ORM:使用SQLite数据库的简单操作,优势在于无需编写SQL查询。
数据架构(Data Structure)
Eclipse Collections:用于Java的Collections框架,可为容器类型附加迭代方法的操作等。
日期和时间(Date & Time)
TimesSquare for Android:简单独立的日历小部件,可在日历视图中选择日期。
Material Calendar View:移植到Material design的安卓CalendarView。
依赖(Dependencies)
Dagger:进行Android依赖注入的快捷方式。
文档(Files)
Android-FilePicker:一款照片选择器,可从列表中选择图片或文档。
Material File Picker:Material design中的文件选择器。
函数式编程(Functional Programing)
Retrolambda:在Java 7中使用Lambdas的一种操作。
手势(Gestures)
Sensey:在Android应用程序中添加手势的简单操作。
Android 3D Touch – PeekView:类似于iOS上的3D Touch,用以“预览”程序内容。
蓝牙(Bluetooth)
Android-BluetoothSPPLibrary:使用序列化蓝牙端口(Bluetooth Serial Port Profile)的简单操作。
RxAndroidBle:蓝牙低耗能处理工具。
相机(Camera)
CameraFilter:使用OpenGL着色器的实时相机滤镜。
Material Camera:Android开发的快速简易的相机框架。
位置(Location)
ReactiveLocation:Google Play API的小型但实用的封装程序,用于获取位置。
Smart Location Library:简化位置提供项的库。
布局(Layout)
Android Swipe Layout:为对象提供滑动布局,如,向左滑动即删除的操作。
FlexboxLayout :为Android提供框布局,其内容可通过CSS了解。
日志(Logging)
Logger:Android日志记录器。
Hugo:用触发注释的方法调用记录。
地图(Maps)
AirMapView :用以查看Google Maps API摘要,非常适合没有Google Play服务的应用程式。
Google地图的实用程序,如,热点地图或标记聚类。
音频播放器(Audio)
Music Player:含UI的完整音乐播放器。
RxAndroidAudio :封装带有Rx支持的Android Audio API RxAndroid音频播放器。
GIF
android-gif-drawable:使用视图和可绘制的GIF动图。
GifView :Android上使用View播放的GIF库。
图像(Image)
uCrop:对Android上的图片进行裁剪的库。
Glide:Android的媒体管理和图片加载库。
视频播放器(Video)
VideoPlayerManager:对Android MediaPlayer类的使用进行帮助说明的库。
Easy Video Player:易于操作的视频播放器,可通过视图使用。
信息(Messaging)
Chateau:在Android应用中提供聊天功能的框架。
网络(Networking)
OkHttp:Android的HTTP客户端。
AndroidAsync:基础级网络协议库。
消息推送(Push Notifications)
PubNub:用于处理推送通知的商业服务。
Gandalf:用于发送更新或维护相关的通知。
支付(Payments)
Android In-App Billing v3 Library:通过Android v3 API轻松处理应用内置付款的库。
Checkout:处理应用内购买操作的库。
安全(Security)
Sodium:轻松做加密,解密,签名和散列操作的工具。
PiracyChecker:通过使用Google的LVL,防止应用程式被盗用的工具。
文本(Text)
Ticker:显示滚动文本的UI组件。
MaterialEditText:Material Design的文本输入器。
字体(Font)
fontbinding:使用数据绑定的XML自定义字体的操作。
Calligraphy:在Android应用程式上使用传统字体的简易操作。
用户界面(User Interface)
Material Design Android Library:在Android中使用Google的Material Design(Android 2.2版)的库。
Material:将Material Design导入原有应用程序的库。
指示器(Activity Indicator)
AppIntro:为应用程序创建炫酷简介,类似于Google原始应用中的。
LolliPin:为应用程序提供pin密码。
操作按钮(Buttons)
Android-Bootstrap:通过使用Bootstrape规则,进行诸如在APP中创建按钮的操作。
Android Morphing Button:Android的操作按钮,其形状大小可更改。
表格(Form)
Vertical Stepper Form Library:在Material Design中创建表单的库。
键盘(Keyboard)
KeyboardVisibilityEvent:显示与隐藏键盘的简单操作。
AndroidKeyboardWatcher:追踪键盘开启/关闭操作情况的库。
菜单(Menu)
BottomBar:在Material Design中提供底部导航栏的视图组件。
Side Menu:为应用程序添加侧边菜单栏的工具。
评分(Rating)
Android-Rate:提醒用户对应用程序进行评价的简易库。
SimpleRatingBar:用于星级评分的UI组件。
滑屏(Slider)
SlidingMenu:轻松为应用程序创建滑动式菜单项。
MaterialDrawer:Android中轻便灵活的抽屉布局式库。
英语原文:Best Android Libraries for Developers
编译:开源中国
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:面向开发者的最佳 Android 库列表
本文地址:https://www.oschina.net/news/78857/best-android-libraries-for-developers