以下例子实现:
1)用Random产生3个0到255的随机整数凑成一个随机颜色
2)用定时器每隔一段时间重画一次界面
3)创建Bitmap(位图)类型图片bm,每次绘制界面时先把bm每个像素点设置成随机颜色(比canvas.DrawPoint效率高的多),最后把整个图片贴到(充满)窗口。
最终效果就是不断变换颜色的彩色雪花屏。
从本次开始,我们把自定义的类都写到MainActivity内,这样可以共用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){//构造(初始化)函数
super(con);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
//窗口大小改变时触发
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(){//每次要做的内容
view.invalidate();//重绘窗口
}
},0,10);//0毫秒后开始,每隔10毫秒运行一次
}
@Override
protected void onDraw(Canvas canvas)
{
Paint p=new Paint();
int ix,iy;
Random r=new Random();//创建随机数生成器
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)));//设置图片每个像素为随机色
canvas.drawBitmap(bm,null,new RectF(0,0,winx,winy),p);//把图片贴到屏幕
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
//触控屏幕时触发
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设为整个界面
}
}
效果
网友评论