﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-笔头。。-随笔分类-richclient</title><link>http://www.blogjava.net/onedaylover/category/28956.html</link><description>实践启示</description><language>zh-cn</language><lastBuildDate>Thu, 14 Feb 2008 08:56:14 GMT</lastBuildDate><pubDate>Thu, 14 Feb 2008 08:56:14 GMT</pubDate><ttl>60</ttl><item><title>swing Timer 与 animation 之 技巧一让往返因数 fraction从1到0再从0到1</title><link>http://www.blogjava.net/onedaylover/archive/2008/02/14/179906.html</link><dc:creator>如果有一天de</dc:creator><author>如果有一天de</author><pubDate>Thu, 14 Feb 2008 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/onedaylover/archive/2008/02/14/179906.html</guid><wfw:comment>http://www.blogjava.net/onedaylover/comments/179906.html</wfw:comment><comments>http://www.blogjava.net/onedaylover/archive/2008/02/14/179906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/onedaylover/comments/commentRss/179906.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/onedaylover/services/trackbacks/179906.html</trackback:ping><description><![CDATA[动画的实现上来说，是设置定时器进行刷新.<br />
对于Swing程序来说java.swing.Timer类保证了线程在swing调用上的安全性。通过时间参数的设置时间动态定时刷新，<br />
对于动态往复描绘来说，比如类似于动态的颜色变化，动态的进行透明变化之类的周期性刷新来说，一般需要几个条件<br />
1.动画的周期性<br />
2.动画的当前状态在起始状态和目标状态之间<br />
实现上需要这么几个参数<br />
<ul>
    <li>起始时间 animation startTime<br />
    </li>
    <li>当前时间 currentime<br />
    </li>
    <li>动画周期 animation duration</li>
    <li>往返因数 fraction<br />
    </li>
</ul>
<h2>&nbsp;&nbsp;&nbsp; 往返因数fraction</h2>
&nbsp;&nbsp;&nbsp; 比如动态调整透明度、动态修改颜色在动画的过程中可以设定起始与目标值，通过fraction在0-1范围内进行运算进行调整。<br />
以算法来描述则为<br />
&nbsp; 起始值设为 init<br />
&nbsp; 目标值为 dest<br />
&nbsp; 实际值为 actual<br />
&nbsp;&nbsp;&nbsp; actual=init*(1-fraction)+dest*fraction;<br />
&nbsp; 比较明显的例子为，将颜色从初始颜色动态变化到目标颜色<br />
&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;Color&nbsp;startColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Color.red;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;where&nbsp;we&nbsp;start</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Color&nbsp;endColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Color.BLACK;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;where&nbsp;we&nbsp;end</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Color&nbsp;currentColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;startColor;</span></div>
&nbsp;&nbsp; ....<br />
&nbsp;&nbsp; 描绘currentColor的一个圆<br />
&nbsp;&nbsp; 在Timer的actionPerform里调整currentColor<br />
&nbsp;&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;interpolate&nbsp;between&nbsp;start&nbsp;and&nbsp;end&nbsp;colors&nbsp;with&nbsp;current&nbsp;fraction</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;red&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)(fraction&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;endColor.getRed()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;fraction)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;startColor.getRed());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;green&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)(fraction&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;endColor.getGreen()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;fraction)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;startColor.getGreen());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;blue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)(fraction&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;endColor.getBlue()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;fraction)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;startColor.getBlue());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;set&nbsp;our&nbsp;new&nbsp;color&nbsp;appropriately</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Color(red,&nbsp;green,&nbsp;blue);</span></div>
<h2>通过定时器的时间参数动态调整往返因数</h2>
&nbsp;&nbsp;&nbsp; 通过时间参数进行计算<br />
&nbsp;&nbsp;&nbsp; 如下代码所示，在Timer的actionPerform里实现<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; long</span><span style="color: #000000;">&nbsp;currentTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.nanoTime()&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1000000</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;totalTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;currentTime&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;animationStartTime;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调整周期的起始时间<br />
</span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if</span><span style="color: #000000;">&nbsp;(totalTime&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;animationDuration)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;animationStartTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;currentTime;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">float</span><span style="color: #000000;">&nbsp;fraction&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">float</span><span style="color: #000000;">)totalTime&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;animationDuration;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fraction&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.min(</span><span style="color: #000000;">1.0f</span><span style="color: #000000;">,&nbsp;fraction);</span></div>
&nbsp;&nbsp;&nbsp;&nbsp; 注意当前只是计算出了fraction，如何使因子在1-0和0-1之间往复变化呢<br />
&nbsp;&nbsp;&nbsp; 以下代码实现了该算法<br />
&nbsp;&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;This&nbsp;calculation&nbsp;will&nbsp;cause&nbsp;alpha&nbsp;to&nbsp;go&nbsp;from&nbsp;1&nbsp;to&nbsp;0&nbsp;and&nbsp;back&nbsp;to&nbsp;1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;as&nbsp;the&nbsp;fraction&nbsp;goes&nbsp;from&nbsp;0&nbsp;to&nbsp;1</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alpha&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.abs(</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;fraction));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />
&nbsp;&nbsp;&nbsp; //repaint();//重新绘制<br />
</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/onedaylover/aggbug/179906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/onedaylover/" target="_blank">如果有一天de</a> 2008-02-14 12:00 <a href="http://www.blogjava.net/onedaylover/archive/2008/02/14/179906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用java2D的scale实现图片翻转</title><link>http://www.blogjava.net/onedaylover/archive/2008/01/21/176805.html</link><dc:creator>如果有一天de</dc:creator><author>如果有一天de</author><pubDate>Mon, 21 Jan 2008 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/onedaylover/archive/2008/01/21/176805.html</guid><wfw:comment>http://www.blogjava.net/onedaylover/comments/176805.html</wfw:comment><comments>http://www.blogjava.net/onedaylover/archive/2008/01/21/176805.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/onedaylover/comments/commentRss/176805.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/onedaylover/services/trackbacks/176805.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通过java2D的scale方法实现翻转图片，包括沿着图片的四个边进行翻转&nbsp;&nbsp;<a href='http://www.blogjava.net/onedaylover/archive/2008/01/21/176805.html'>阅读全文</a><img src ="http://www.blogjava.net/onedaylover/aggbug/176805.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/onedaylover/" target="_blank">如果有一天de</a> 2008-01-21 17:35 <a href="http://www.blogjava.net/onedaylover/archive/2008/01/21/176805.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于porter-duff的等式和12种规则演示例子</title><link>http://www.blogjava.net/onedaylover/archive/2008/01/16/175675.html</link><dc:creator>如果有一天de</dc:creator><author>如果有一天de</author><pubDate>Wed, 16 Jan 2008 06:20:00 GMT</pubDate><guid>http://www.blogjava.net/onedaylover/archive/2008/01/16/175675.html</guid><wfw:comment>http://www.blogjava.net/onedaylover/comments/175675.html</wfw:comment><comments>http://www.blogjava.net/onedaylover/archive/2008/01/16/175675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/onedaylover/comments/commentRss/175675.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/onedaylover/services/trackbacks/175675.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关于porter-duff的等式和12种规则演示例子&nbsp;&nbsp;<a href='http://www.blogjava.net/onedaylover/archive/2008/01/16/175675.html'>阅读全文</a><img src ="http://www.blogjava.net/onedaylover/aggbug/175675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/onedaylover/" target="_blank">如果有一天de</a> 2008-01-16 14:20 <a href="http://www.blogjava.net/onedaylover/archive/2008/01/16/175675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于alphaComposite的porter-duff12种规则应用</title><link>http://www.blogjava.net/onedaylover/archive/2008/01/15/175508.html</link><dc:creator>如果有一天de</dc:creator><author>如果有一天de</author><pubDate>Tue, 15 Jan 2008 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/onedaylover/archive/2008/01/15/175508.html</guid><wfw:comment>http://www.blogjava.net/onedaylover/comments/175508.html</wfw:comment><comments>http://www.blogjava.net/onedaylover/archive/2008/01/15/175508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/onedaylover/comments/commentRss/175508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/onedaylover/services/trackbacks/175508.html</trackback:ping><description><![CDATA[关于alphaComposite的porter-duff12种规则应用<br />
如果理解起来真的麻烦，经常用到的是Clear,SrcIn,Src,SrcOver<br />
如经常用到的例子<br />
Clear,如Phtoshope的橡皮擦<br />
SrcIn,以背景为框框，在背景内绘制<br />
SrcOver,覆盖色与背景色混合显示<br />
DstIn，在 fade out，reflection可以使用<br />
<br />
<img src ="http://www.blogjava.net/onedaylover/aggbug/175508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/onedaylover/" target="_blank">如果有一天de</a> 2008-01-15 17:29 <a href="http://www.blogjava.net/onedaylover/archive/2008/01/15/175508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>porter-duff的12种组合规则</title><link>http://www.blogjava.net/onedaylover/archive/2008/01/14/175244.html</link><dc:creator>如果有一天de</dc:creator><author>如果有一天de</author><pubDate>Mon, 14 Jan 2008 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/onedaylover/archive/2008/01/14/175244.html</guid><wfw:comment>http://www.blogjava.net/onedaylover/comments/175244.html</wfw:comment><comments>http://www.blogjava.net/onedaylover/archive/2008/01/14/175244.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/onedaylover/comments/commentRss/175244.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/onedaylover/services/trackbacks/175244.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 记录一下Porter-duff12种颜色组合规则，附图说明&nbsp;&nbsp;<a href='http://www.blogjava.net/onedaylover/archive/2008/01/14/175244.html'>阅读全文</a><img src ="http://www.blogjava.net/onedaylover/aggbug/175244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/onedaylover/" target="_blank">如果有一天de</a> 2008-01-14 16:33 <a href="http://www.blogjava.net/onedaylover/archive/2008/01/14/175244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>