以下例子實現(xiàn):
1)用Random產(chǎn)生3個0到255的隨機(jī)整數(shù)湊成一個隨機(jī)顏色
2)用定時器每隔一段時間重畫一次界面
3)創(chuàng)建Bitmap(位圖)類型圖片bm册倒,每次繪制界面時先把bm每個像素點設(shè)置成隨機(jī)顏色(比canvas.DrawPoint效率高的多)蚓挤,最后把整個圖片貼到(充滿)窗口。
最終效果就是不斷變換顏色的彩色雪花屏驻子。
從本次開始灿意,我們把自定義的類都寫到MainActivity內(nèi),這樣可以共用MainActivity的全局變量崇呵。
package com.baobao.sayhello;
import android.app.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import java.util.*;
public class MainActivity extends Activity
{
mview view;
int winx,winy,bmx,bmy;
Bitmap bm;
class mview extends View{//自定義一個叫mview的新類型缤剧,繼承View
public mview(Context con){//構(gòu)造(初始化)函數(shù)
super(con);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
//窗口大小改變時觸發(fā)
super.onSizeChanged(w, h, oldw, oldh);
winx=w;winy=h;bmx=winx/8;bmy=winy/8;
bm=Bitmap.createBitmap(bmx,bmy,Bitmap.Config.RGB_565);//建立指定寬高的圖片bm
new Timer().schedule(new TimerTask(){//建立定時器
@Override
public void run(){//每次要做的內(nèi)容
view.invalidate();//重繪窗口
}
},0,10);//0毫秒后開始,每隔10毫秒運行一次
}
@Override
protected void onDraw(Canvas canvas)
{
Paint p=new Paint();
int ix,iy;
Random r=new Random();//創(chuàng)建隨機(jī)數(shù)生成器
for(ix=0;ix<bmx;ix++)
for(iy=0;iy<bmy;iy++)
bm.setPixel(ix,iy,Color.rgb(r.nextInt(256),r.nextInt(256),r.nextInt(256)));//設(shè)置圖片每個像素為隨機(jī)色
canvas.drawBitmap(bm,null,new RectF(0,0,winx,winy),p);//把圖片貼到屏幕
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
//觸控屏幕時觸發(fā)
if(event.getAction()==MotionEvent.ACTION_DOWN){
//如果事件類型為按下
}
return true;//返回真域慷,表示已處理消息
}
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
view=new mview(this);//新建一個叫view的mview
setContentView(view);//把view設(shè)為整個界面
}
}