使用WindowManager进行progress提示
来源:互联网 发布:网上邻居网络密码 编辑:程序博客网 时间:2024/05/17 02:05
package login;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.view.Gravity;import android.view.View;import android.view.WindowManager;import fusion.FusionField;/** * * <一句话功能简述> * * @author 0000005487 * @version [版本号, 2012-8-3] * @see [相关类/方法] * @since [产品/模块版本] */public class ProgressTitleBar extends View{ private Context mContext; private Paint mPaint; private WindowManager mWindowManager; private String mText; private int mWidth; private int mHeight; private int curCount; private int totalCount; private int progressValue; public ProgressTitleBar(Context context) { super(context); this.mContext = context; mWindowManager = (WindowManager)mContext.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); mPaint = new Paint(); } public void addToWindow() { WindowManager.LayoutParams params = new WindowManager.LayoutParams(); params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;// params.type = WindowManager.LayoutParams.FIRST_SUB_WINDOW; params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; params.width = FusionField.screenWidth != 0 ? FusionField.screenWidth : 1280; params.height = 20; params.alpha = 0.6f; params.gravity = Gravity.LEFT | Gravity.BOTTOM; //以屏幕左上角为原点,设置x、y初始值 params.x = 0; params.y = mHeight; mWindowManager.addView(this, params); } public void removeView() { mWindowManager.removeView(this); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (totalCount > 0) { canvas.drawColor(0x88000000); if (progressValue > 0 && progressValue <= 100) { mPaint.setColor(0x8800FF00); canvas.drawRect(0, 0, mWidth * (progressValue / 100f), mHeight, mPaint); } mPaint.setColor(0xFFFFFFFF); mPaint.measureText(mText); canvas.drawText(mText, (mWidth - mPaint.measureText(mText)) / 2, 18, mPaint); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { mWidth = FusionField.screenWidth != 0 ? FusionField.screenWidth : 1280; mHeight = 20; setMeasuredDimension(mWidth, mHeight); } public void setProgress(int cCount, int tCount, int pValue) { this.curCount = cCount < 0 ? 0 : cCount; this.totalCount = tCount > curCount ? curCount : tCount; mText = new StringBuffer("正在上传录像").append(curCount).append("/").append(totalCount).toString(); this.progressValue = pValue < 0 ? 0 : pValue > 100 ? 100 : pValue; this.invalidate(); } }