读书人

两个activity 跳转当中用进度条。andr

发布时间: 2013-10-27 15:21:49 作者: rapoo

两个activity 跳转中间用进度条。android
两个activity 前一个按扭点击事件执行查询,数据量比较大,所以跳转等待时间比较长,固想用进度条显示程序运行中...该如何实现?

[解决办法]
应该能看懂吧


package com.zyq.main;

import java.util.ArrayList;

import android.app.Activity;
import android.app.Dialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;
public class ListProgressDemo extends ListActivity {
private ArrayAdapter<String> adapter;
private ArrayList<String> data;

private static final int PROGRESS_DIALOG = 1;
private static final int STATE_FINISH = 1;
private static final int STATE_ERROR = -1;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

((Button) findViewById(R.id.load_Handler)).setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View view) {
data = null;
data = new ArrayList<String>();

adapter = null;

showDialog(PROGRESS_DIALOG);
new ProgressThread(handler, data).start();
}
});
}

@Override
protected Dialog onCreateDialog(int id) {
switch(id) {
case PROGRESS_DIALOG:
return ProgressDialog.show(this, "",
"Loading. Please wait...", true);

default: return null;
}
}

private class ProgressThread extends Thread {

private Handler handler;
private ArrayList<String> data;

public ProgressThread(Handler handler, ArrayList<String> data) {
this.handler = handler;
this.data = data;
}

@Override
public void run() {
for (int i=0; i<8; i++) {
data.add("ListItem"); //后台数据处理
try {
Thread.sleep(100);
}catch(InterruptedException e) {


Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putInt("state", STATE_ERROR);
msg.setData(b);
handler.sendMessage(msg);

}
}
Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putInt("state", STATE_FINISH);
msg.setData(b);
handler.sendMessage(msg);
}

}

// 此处甚至可以不需要设置Looper,因为Handler默认就使用当前线程的Looper
private final Handler handler = new Handler(Looper.getMainLooper()) {

public void handleMessage(Message msg) { // 处理Message,更新ListView
int state = msg.getData().getInt("state");
switch(state){
case STATE_FINISH:
dismissDialog(PROGRESS_DIALOG);
Toast.makeText(getApplicationContext(),
"加载完成!",
Toast.LENGTH_LONG)
.show();

adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1,
data );

setListAdapter(adapter);

break;

case STATE_ERROR:
dismissDialog(PROGRESS_DIALOG);
Toast.makeText(getApplicationContext(),
"处理过程发生错误!",
Toast.LENGTH_LONG)
.show();

adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1,


data );

setListAdapter(adapter);

break;

default:

}
}
};
}


[解决办法]
package CityLife.View;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Bitmap.Config;
import android.graphics.Paint.Style;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class StartView extends Activity
{
//
Paint paint = null;
Bitmap mSCBitmap = null;
Canvas mCanvas = null;
//
int a,b;
int startDrawBgX, startDrawBgY;
int startProgressX,startProgressY;
int startRectX ,startRectY ;
int rectW , rectH;
Bitmap bmpStartBg;
Bitmap bmpProgressBar;
Bitmap bmpStartBgL;
Bitmap bmpProgressBarL;
Boolean runA = true;
//
private MyView myView;
private Handler mHandler;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
//设置全屏
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.TYPE_STATUS_BAR,
WindowManager.LayoutParams.TYPE_STATUS_BAR);
//
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//
bmpStartBg = BitmapFactory.decodeResource(getResources(), R.drawable.startbg);
bmpProgressBar = BitmapFactory.decodeResource(getResources(), R.drawable.progressbg);
//
int w = bmpStartBg.getWidth()*2;
int h = bmpStartBg.getWidth();
int width = bmpStartBg.getWidth();
int height = bmpStartBg.getHeight();
int newWidth = w;
int newHeight = h;
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
a = (int) scaleWidth;
b = (int) scaleHeight;
//
Matrix matrix = new Matrix();
matrix.postScale(a, b);
//
bmpStartBgL = Bitmap.createBitmap(bmpStartBg, 0, 0, bmpStartBg.getWidth(),bmpStartBg.getHeight(), matrix, true);
bmpProgressBarL = Bitmap.createBitmap(bmpProgressBar, 0, 0, bmpProgressBar.getWidth(),bmpProgressBar.getHeight(), matrix, true);
//
startDrawBgY = (this.getWindowManager().getDefaultDisplay().getHeight() - bmpStartBgL.getHeight()) / 2 - 40;
startDrawBgX = (this.getWindowManager().getDefaultDisplay().getWidth() - bmpStartBgL.getWidth()) / 2;
//


startProgressY = (this.getWindowManager().getDefaultDisplay().getHeight() - bmpProgressBarL.getHeight()) / 2 - 15;
startProgressX = (this.getWindowManager().getDefaultDisplay().getWidth() - bmpProgressBarL.getWidth()) / 2;
//
startRectX = startProgressX;
startRectY = startProgressY;
rectW = startProgressX+bmpProgressBarL.getWidth();
rectH = startProgressY+bmpProgressBarL.getHeight();
//
myView = new MyView(this);
setContentView(myView);
//
mSCBitmap = Bitmap.createBitmap(320, 480, Config.ARGB_8888);
mCanvas = new Canvas();
mCanvas.setBitmap(mSCBitmap);
//
mHandler = new Handler();
mHandler.post(update);
}
private Runnable update = new Runnable()
{
public void run()
{
myView.update();
mHandler.postDelayed(update, 100);
}
};
public class MyView extends View
{
public MyView(Context context)
{
super(context);
}
public void update()
{
postInvalidate();
}
protected void onDraw(Canvas canvas)
{
// super.onDraw(canvas);
if(startRectX < startProgressX + bmpProgressBarL.getWidth())
{
startRectX = startRectX + 2;
//首先定义一个paint
paint = new Paint();
// 设置样式-填充
paint.setStyle(Style.FILL);
paint.setColor(UsedColor.startBgColor);
// 绘制一个矩形
mCanvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), paint);
//输出背景图片
paint.setColor(UsedColor.progressBgColor);
mCanvas.drawBitmap(bmpStartBgL, startDrawBgX, startDrawBgY, paint);
mCanvas.drawBitmap(bmpProgressBarL, startProgressX, startProgressY, paint);
mCanvas.drawRect(new Rect(startRectX, startRectY, rectW, rectH), paint);
canvas.drawBitmap(mSCBitmap, 0 ,0, paint);
}
else
{
if(runA)
{
finish();
//生成一个Intent对象
Intent intent = new Intent();
intent.putExtra("textIntent", "");
intent.setClass(StartView.this, MainView.class);
StartView.this.startActivity(intent);
runA = false;
}
}
}
}
}

这是我做的一个项目的, 就是启动界面 开头的一个登陆的activity 然后进入主界面。

读书人网 >Android

热点推荐