Android 开源代码学习——NoBoringActionBar

代码功能

该示例工程实现了自定义ActionBar,可以使一个图片平滑过渡到ActionBar Icon的位置,并以ActionBar Icon的形式展现出来。而且还实现了背景图片的自动切换,缩放和平移。可以在展示用户资料等场景使用。

关键代码学习

2.1 NoBoringActionBarActivity.java

setTitleAlpha(clamp(5.0F * ratio - 4.0F, 0.0F, 1.0F));

注:这行代码是用来设置ActionBar Title 的透明度的,该方法控制Title在向上移动可移动总高度的4/5之后才开始显示。

public static float clamp(float value, float min, float max) {
    return Math.max(min, Math.min(value, max));
}

注:该方法限制Value的取值范围为[min,max]

2.2 KenBurnsView.java

Handler.post(Runnable r);

注:将参数Runnable的实例对象加入到Handler消息队列中

Handler.removeCallbacks(Runnable r);

注:将参数Runnable的实例对象从消息队列中移除



private void start(View view, long duration, float fromScale, float toScale, float fromTranslationX,
            float fromTranslationY, float toTranslationX, float toTranslationY) {
        view.setScaleX(fromScale);
        view.setScaleY(fromScale);
        view.setTranslationX(fromTranslationX);
        view.setTranslationY(fromTranslationY);
        ViewPropertyAnimator propertyAnimator = view.animate().translationX(toTranslationX)
                .translationY(toTranslationY).scaleX(toScale).scaleY(toScale).setDuration(duration);
        propertyAnimator.start();
        Log.d(TAG, "starting Ken Burns animation " + propertyAnimator);
}

注:执行该方法的效果是使背景图片随机平移,缩放。

系统API使用与理解

3.1 ViewPropertyAnimator

This class may provide better performance for several simultaneous animations, because it will optimize invalidate calls to take place only once for several properties instead of each animated property independently causing its own invalidation.

根据官方API的解释,该类在几个动画同时执行的时候使用性能比较好。

总结

这么一个简单的demo自己愣是用了3周时间才整理出来,太拖拉了。而且动画那块的东西现在自己还是没有吃透,也许过几天会发一篇关于安卓动画的博客吧。不啰嗦了,附件为自己简单注释过的代码,有兴趣的同学可以研究一下。

http://yunpan.cn/cfGZLjBZS6udk 访问密码 b0c7

时间: 2024-10-10 05:04:07

Android 开源代码学习——NoBoringActionBar的相关文章

常见的Android开源代码以及框架

Android SDK源代码 http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 开源代码 http://www.open-open.com/lib/view/open1404286864296.htmlhttp://www.apkbus.com/android-170798-1-1.html Gif 图片显示框架https://github.com/koral--/an

android开源代码演示项目CodeBox

CodeBox是一个搜集优秀android开源代码并提供演示的安卓客户端,其演示功能是将开源项目作为插件加载到客户端中.插件的实现得益于 dynamic-load-apk-Apk动态加载框架https://github.com/singwhatiwanna/dynamic-load-apk . 目前已经完成的插件非常少,还需要大量的编译插件的工作. 希望能有更多的朋友参与进来.项目地址: https://github.com/jianghejie/CodeBox 如果你对该项目感兴趣,可以加入到

22个值得收藏的Android开源代码-UI篇

  FileBrowserView 一个强大的文件选择控件.界面比较漂亮,使用也很简单.特点:可以自定义UI:支持复制.剪切.删除.移动文件:可以用在Fragment.ativity.DialogFragment中:支持快速切换目录. 项目地址: https://github.com/psaravan/FileBrowserView MultiItemRowListAdapter 多列效果的ListView,采用重新包装adapter的方式,使你的ListView可以显示成多列,跟普通的List

android开源项目学习

FBReaderJ FBReaderJ用于Android平台的电子书阅读器,它支持多种电子书籍格式包括:oeb.ePub和fb2.此外还支持直接读取zip.tar和gzip等压缩文档. 项目地址:http://www.fbreader.org/FBReaderJ/ Angle Angle是一款专为Android平台设计的,适合快速开发的2D游戏引擎,基于OpenGL ES技术开发.该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现. 项目地址:http://code.google

Github上面的Android开源代码(一)

总有一些朋友很热心的整理一些好的资料,在收集之后,可以用作阅读.学习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) 为了防止以上链接失效,以及部分内容丢失,所以,部分搬运过来.自己练习和实践,参考如下链接: GitHub上不错的Android开源项目(一):http://www.cnblogs.com/haochuang/p/4676090.html GitHub上不错的Android开源项目(二):http://www.cnblogs.com/h

160多个android开源代码汇总

第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style等等..其他 一.ListView android-pulltorefresh一个强大的拉动刷新开源项目,支持各种控件下拉刷新

Android开源代码汇总

第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style等等. .其他 一.ListView Android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉

Android 开源代码

1.Android 5.0层叠式卡片布局(类似原生多任务栏的效果) https://github.com/vikramkakkar/DeckView 2.网络图片异步加载 https://github.com/nostra13/Android-Universal-Image-Loader 3.Code4App Android 常用自定义效果和控件 http://a.code4app.com/ 4.gitHub优秀开源项目 http://blog.csdn.net/fbird45/article/

Android开源代码解读のOnScrollListener实现ListView滚屏时不加载数据

使用ListView过程中,如果滚动加载数据的操作比较费时,很容易在滚屏时出现屏幕卡住的现象,一个解决的办法就是不要在滚动时加载数据,而是等到滚动停止后再进行数据的加载.这同样要实现OnScrollListener接口,关于该接口的简要描述见上一篇文章,这里直接进行代码的分析: package hust.iprai.asce1885; import android.app.ListActivity; import android.content.Context; import android.o