2.1效果分析:
1. 每個雪花都是隨機的一張資源(總共五張),每一張轉為bitmap,然後在ondraw中繪製;
2. 每個雪花它的寬高是隨機的範圍,旋轉的角度是隨機的範圍,加速度也是隨機的;
3. 每個雪花不擁有乙個單獨的動畫,只用乙個動畫來控制所有的雪花每一幀的顯示;
4. 每個雪花的運動利用matrix實現(settranslate(),postrotate(),posttranslate())
2.2實現單個雪花飄落:
先實現單個雪花的飄落,新建singlesnowview extends view , 在他的內部新建乙個靜態的snow內部類,snow類提供乙個靜態的方法,初始化雪花的大小,旋轉角度以及加速度然後返回乙個snow例項:
public
class
singlesnowview
extends
view
return snow;
}@override
public string tostring() }}
每個雪花不擁有單獨的動畫,只有乙個動畫用於更新每一幀的動畫(更新位置和旋轉角度),最後在ondraw()中繪製
public
class
singlesnowview
extends
view
public
singlesnowview(context context, attributeset attrs)
public
singlesnowview(context context, attributeset attrs, int defstyleattr)
private
void
initdata()
// 雪花旋轉
msnow.rotation = msnow.rotation + (msnow.rotationspeed * secs);
// 請求重新去重新整理繪製介面
invalidate();
}});
manimator.setrepeatcount(valueanimator.infinite);
manimator.setduration(2000);
}@override
protected
void
ondraw(canvas canvas)
/*** 開始下雪
*/public
void
startsnow(int rangewidth)
manimator.start();
}/**
* 停止下雪
*/public
void
stopsnow()
}
在activity中的效果:
2.3.滿屏雪花飄落
既然乙個雪花可以了,那麼滿屏雪花飄落就很簡單了,無非就是將多個雪花放入集合中,在原來的基礎上修改一下就可以了:
public
class
snowview
extends
view
// 請求重新去重新整理繪製介面
invalidate();
}});
}} @override
protected
void
ondraw(canvas canvas)
// todo 下面計算幀速率
}/**
* 開始下雪
*/public
void
startsnow(int rangewidth)
public
intgetsnownumber()
/*** 新增雪花
*/public
void
addsnows(int snownumber, int rangewidth)
// 當前雪花數量疊加
msnownumber += snownumber;}}
}
2.4.最後在activity中測試public
class
mainactivity
extends
activity
@onclick(r.id.tv_play)
private
void
startsnow()}};
handlerrain.postdelayed(runnablerain, 0);}}
js雪花飄落特效
呼叫 new snows 外掛程式封裝 注 固定引數不可在呼叫時配置 var pluginname snow defaults var snow function opt snow.prototype else if reset this sy isquick math.random this op...
Qt 實現桌面雪花飄落 修改1
今年聖誕節手癢簡單實現了乙個桌面雪花飄落的動畫背景,發給老婆體驗一下,提了些意見,進行了改進.今天改進了以下幾點 1.雪花旋轉了 2.加入了飄落時會左右飄動,想模擬風吹的感覺.很生硬,演算法還得優化 4.下落速度和左右飄的速度在一定的範圍內隨機生成 這個版本的 託管在github.com上了 備註 ...
簡單說 JavaScript實現雪花飄落效果
settimeout函式用來指定某個函式或某段 在多少毫秒之後執行。它返回乙個整數,表示定時器的編號,以後可以用來取消這個定時器。var timerid settimeout func code,delay setinterval函式的用法與settimeout完全一致,區別僅僅在於setinter...