两个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 然后进入主界面。