android使用WindowManager显示自定义View

来源:互联网 发布:电子面单打印软件 编辑:程序博客网 时间:2024/06/05 11:25

调用方式:

ShowMessage showMessage = new ShowMessage(getApplicationContext());

//显示

showMessage.show();

showMessage.setMessage("Hello World!")

//消隐

showMessage.hide();



代码:


import android.content.Context;

import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Typeface;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;

public class ShowMessage extends View{

    private static final String TAG = "ShowMessage";
    private int textHeight = 60;
    private int textWidth = 260;
    private int rawNum = 10;
    private int msg_textsize = 24;
    private String messageStr = null;
    private boolean shown = false;
    private Paint   paint = null;
    private WindowManager mWm = null;
    private WindowManager.LayoutParams wmParams = null;
    public ShowMessage(Context context) {
        super(context);
        mWm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
        int screenWidth = mWm.getDefaultDisplay().getWidth();
        int screenHeight = mWm.getDefaultDisplay().getHeight();
        Log.i(TAG, "screen width, Height: " + screenWidth + ";" + screenHeight);
        wmParams = new WindowManager.LayoutParams();
        wmParams.type = LayoutParams.TYPE_PHONE + 4;
        wmParams.format = PixelFormat.TRANSPARENT;
        wmParams.gravity = Gravity.LEFT | Gravity.TOP;
        wmParams.type |= LayoutParams.TYPE_SYSTEM_OVERLAY;
        wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL;
        wmParams.width = textWidth;
        wmParams.height = textHeight;
        wmParams.x = screenWidth/2 - textWidth/2;
        wmParams.y = screenHeight/2 - textHeight/2;
    }
    
    public void show(){
        if(!shown){
            Log.i(TAG, "show");
            mWm.addView(this, wmParams);
            shown = true;
        }
    }
    
    public void hide(){
        if(shown){
            mWm.removeView(this);
            shown = false;
        }
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Log.i(TAG, "onDraw");
        draw_msg(canvas);
    }
    
    private void draw_msg(Canvas canvas){
        int len = messageStr.length();
        if(len>10){
            String str1 = messageStr.substring(0, rawNum);
            canvas.drawText(str1, 0, msg_textsize, paint);
            String str2 = messageStr.substring(rawNum, len);
            canvas.drawText(str2, 0, msg_textsize*2+4, paint);
        }else{
            canvas.drawText(messageStr, 0, msg_textsize, paint);
        }
    }
    
    public void setMessage(String s){
        Log.i(TAG, "setMessage: " + s);
        setupPaint();
        messageStr = s;
        postInvalidate();
        
    }
        

    private void setupPaint() {
        if (paint != null)
            return;
        int flags;
        paint = new Paint();
        flags = paint.getFlags();
        flags |= Paint.ANTI_ALIAS_FLAG;
        paint.setFlags(flags);
        paint.setTypeface(Typeface.SANS_SERIF);
        paint.setTextSize(msg_textsize);
        paint.setStyle(Paint.Style.STROKE);
        
        paint.setColor(0xFFFF0000);
    }
    
}