天天看點

安卓界面——最開始界面的加載

安卓界面——最開始界面的加載

點開軟體進入該界面自動加載……..

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消息

                }
            }
        }
    }
}

}