前段时间搞android 动画,在页面中使用动画后效果还是很不错的,大大提升了用户的体验感。 但是,偶然的机会,要在popupwindow 中,添加一个 显示和消失的动画,我用之前的动画效果,居然显示效果不对了。
同样是相同的代码,在页面上,就可以很好的显示,但是在popupwindow 上显示的效果,就不一样了。
eg:
//显示动画
ScaleAnimation myanim = new ScaleAnimation
(0.0f, 1.1f, 0.0f, 1.1f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
myanim.setDuration(duration); //设置时间间隔
//隐藏动画
ScaleAnimation myanim = new ScaleAnimation
(1.0f, 0.0f, 1.0f, 0.0f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
myanim.setDuration(duration); //设置时间间隔
这两个动画,就是一个简单的 以 视图的中心为参照点,放大显示,缩小隐藏 的动画效果。 在页面中,使用没有任何问题。但是在弹出的popupwindow上,却出现了,从左上角开始慢慢扩大的效果。
起初以为是,设置 运动动画view 的问题,但是经过反复调整还是无果。 最后,终于找到了答案。
以下是解决方法:
1> 首先定义好,显示和消失的动画xml;
eg:
<!-- 显示动画-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="200" >
</scale>
</set>
<!-- 消失动画-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 透明度渐变-->
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="200" />
</set>
2> popupwindow 的显示和消失动画,是通过setAnimationStyle(int id) 的方法,来设置动画的。 这个方法的参数是,一个style 的id ;
所以需要一个 动画style;
eg:
<!-- popwidnow 显示消失 动画-->
<style name="mypopwindow_anim_style">
<item name="android:windowEnterAnimation">@anim/popshow_anim</item> <!-- 指定显示的动画xml -->
<item name="android:windowExitAnimation">@anim/pophidden_anim</item> <!-- 指定消失的动画xml -->
</style>
3> 在代码中,添加popupwindow 动画;
eg:
PopupWindow myimgpopupwindow = new PopupWindow( View (要显示的view对象), LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
myimgpopupwindow.setAnimationStyle(R.style.mypopwindow_anim_style); //设置动画
myimgpopupwindow.showAtLocation( View( 参照的view对象), Gravity.CENTER, 0, 0); //居中来显示
好了,1,2,3, 搞定!这下,你是不是也会给popupwindow设置显示消失动画了? Come on ! 赶快试试吧!*~*
### set log levels ###
log4j.rootLogger = stdout,debug,D,E
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
## 输出INFO级别以上的日志
log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
## 输出DEBUG级别以上的日志
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/logs/log.log
log4j.appender.D.Append = true
### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.E.File = D\:/logs/error.log
log4j.appender.E.Append = true
## 只输出ERROR级别以上的日志!!!
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n
程序员间的无形差距分析:
“菜鸟”程序员的代码是什么样子,自己想一下。“菜鸟”程序员的代码往往会会写的比较冗余,而且这些代码不是从书上找来的就是从网上找来的还有可能就是自己会这一部分代码(仅存记忆的提取,真正的原理似懂非懂,好像雾里看花)。
“大神”的代码会写成什么哪?“大神”程序员的代码,当你看的第一眼:简洁;第二眼:真“N”。用最少的代码,把这个程序写的非常精辟了,体现的自己的思维思路。
为什么会出现这样的现象,同样一个小的功能,放在不同的手里就产生不同的结果。这个难道不值得我们去探究原因吗?
真正的原因是:“菜鸟”程序员没有将自己的思维融入代码,代码是程序员思维智慧的结晶。当我们拿到这一个小功能的时候,我们首先一看,这方面的知识自己准备不足,于是就上网找去了。假如我们去想一下如何去解决,我们解决的方法一般会有两种,第一种是自己会从网上或者是书中找到类似的代码,第二种就是请教别人指点,这种方法感觉不太可能,因为在工作中,大家都很忙,相互讨论帮忙很少的。上网搜的时候我们会经常出现这样的现象:看到这个要编写的程序,感觉自己没什么思路,自己从网上找,找了半天我们收获不大,看了很多实现的方法,但是我们花很长的时间去理解,这样虽然把问题搞出来了,然后就去玩去了。有些时候运气好,想找的问题正好有这类问题的解决方法,那我们就直接把代码搬过来,搞定!所以我们就一直这样循环下去,到最后我们什么也没有留下,下面一幅图就显示我们”菜鸟”程序员的现状。
“大神” 程序员首先拿到这个程序,自己做的第一件事情,就是思考!自己先思考如何实现这个问题,与原来相关知识可以借鉴,列出解决问题的可能性,考虑解决问题的最难点,所以上网搜的时候,直接搜问题的解决问题点,将其转换成自己的思想,用自己的思维写出自己想要的代码来,这就是代码是思维的结晶的精华。
“大神”程序员那样做通过认识几个重要的知识点,就把这个问题就解决了,所以技术对于他们来说,没有任何难度而言,因为他们经过了不断的思考,所以我们就应该认清我们“菜鸟”和“大神”之间的差距在哪里?我们不应该逃避这个问题,因为这个问题决定我们解决问题的态度,决定着我们的人生价值。
1、广度意味着在技术方面可支配的工具、技能和方法广泛的多。
一个只会Java的程序员站在另一个Java程序员身边,他身边的这位同时还知道C++、C#、Ruby、Python、Erlang以及每一种语言的流行框架。如果一个项目只是需要使用Java,那这两个Java程序员是平等的。但如果下一个项目需要更多的技术,这种平等的情况就会发生改变。
2、深度,是指在其工作领域内的知识含量和功底。
在过去,我所编写的COBOL代码也许跟我的E10朋友一样好。但如果我的程序有一个Bug,我的办法只是看着诊断报告不断进行调试。我的朋友不单会做这些,他还会阅读一些核心转储的数据,将一些重要数据转变成汇编程序(他可以从中获得一些启发)等等。在另一个我们一起进行界面编程的项目中,他可以更好的理解我们所操作的平台并知道如何完美的利用这个平台所提供的功能。同样,我的源码可能跟他的没什么太大区别,但如果我们需要向下一个级别进阶……是的,我们之间有一个明显的分界线。
在今天的世界里,这可能意味着程序牛人可以知道如何调整JVM,选取有用的数据分析工具;程序牛人知道如何安装、配置、调试和配置平台。牛人知道如何建立编译环境,而初级程序员也许只知道按照已经确定的方案(平台)进行开发。
技术的广度和深度,我想,我找到了成为高手的密匙。我需要学习更多并努力提到自己的广度和深度(直到今天,我还在努力!)。