您的位置:首页 > 移动开发 > Android开发

android使用WindowManager显示自定义View

2013-09-06 17:13 429 查看
调用方式:

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);

    }

    

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android