點開軟體進入該界面自動加載……..
public class PanlewarActivity extends ActionBarActivity {
int screenwidth;
int screenheight;
ProcessView processview;
Handler myhander = new Handler() {
public void handleMessage(Message msg) {
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
requestWindowFeature(Window.FEATURE_NO_TITLE);//取消标題
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏
DisplayMetrics dm = new DisplayMetrics();//擷取螢幕大小
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenwidth = dm.widthPixels;
screenheight = dm.heightPixels;
processview = new ProcessView(this, , screenwidth, screenheight);
this.setContentView(processview);
}
}
public class ProcessView extends SurfaceView implements SurfaceHolder.Callback{
Bitmap processbackground;
private TutorialThread thread;//刷幀的線程
Bitmap process;
int proces=;
int startx,starty;
private Paint paint;
private boolean flag=true;
private PanlewarActivity activity;
int scren_width=;
int scren_heigt=;
private int type;
public ProcessView(PanlewarActivity activity, int type,int screenwidth,int screenheight) {
super(activity);
this.activity = activity;//得到activity的引用
getHolder().addCallback(this);
this.thread = new TutorialThread(getHolder(), this);//初始化重繪線程
this.type = type;
paint = new Paint();//建立畫筆
/* */
this.scren_width=screenwidth;
this.scren_heigt=screenheight;
paint.setTextSize();//設定字型大小
process = BitmapFactory.decodeResource(getResources(), R.drawable.process);
processbackground = BitmapFactory.decodeResource(getResources(), R.drawable.background_prg);
this.startx=scren_width/-process.getWidth()/;
this.starty=scren_heigt/-process.getHeight()/-process.getHeight()/;
}
public void onDraw(Canvas canvas){
Rect rect1 = new Rect(,,processbackground.getWidth(),processbackground.getHeight());
Rect rect2 = new Rect(,,scren_width,scren_heigt);
canvas.drawBitmap(processbackground,rect1,rect2, null);
canvas.drawBitmap(process,startx,starty, paint);
canvas.drawRect(startx+proces*(process.getWidth()/),starty,startx+process.getWidth(),
starty+process.getHeight(),paint);
canvas.drawText("加載中……"+ proces + "%"
,startx+(process.getWidth()/)-,
starty+(process.getHeight()+),paint);
}
private WindowManager getWindowManager() {
// TODO Auto-generated method stub
return null;
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
this.thread.setFlag(true);//設定線程标志位
this.thread.start();//啟動線程
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
boolean retry = true;//循環标志位
thread.setFlag(false);//設定循環标志位
while (retry) {
try {
thread.join();//等待線程結束
retry = false;
}
catch (InterruptedException e) {}//不斷地循環,直到刷幀線程結束
}
}
class TutorialThread extends Thread{//刷幀線程
private int span = ;//睡眠的毫秒數
private SurfaceHolder surfaceHolder;
private ProcessView processView;//processView引用
private boolean flag = false;//循環标志位
public TutorialThread(SurfaceHolder surfaceHolder, ProcessView processView) {//構造器
this.surfaceHolder = surfaceHolder;
this.processView = processView;//得到加載界面
}
public void setFlag(boolean flag){//設定标志位
this.flag = flag;
}
public void run(){//重寫的run方法
Canvas c;//畫布
while (this.flag){//循環
c = null;
try {
// 鎖定整個畫布,在記憶體要求比較高的情況下,建議參數不要為null
c = this.surfaceHolder.lockCanvas(null);
synchronized (this.surfaceHolder) {
processView.onDraw(c);//調用繪制方法
}
} finally {
if(c!= null) {
//更新螢幕顯示内容
this.surfaceHolder.unlockCanvasAndPost(c);
}
}
try{
Thread.sleep(span);//睡眠指定毫秒數
}
catch(Exception e){//捕獲異常資訊
e.printStackTrace();//列印異常資訊
}
proces+=;
if(proces==){
if(processView.type == ){//切到WelcomeView
//processView.activity.myhander.sendEmptyMessage(4);//向主activity發送Handler消息
}
}
}
}
}
}