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);
}
}
- android使用WindowManager显示自定义View
- 【Android】使用WindowManager添加View
- android.view.WindowManager$BadTokenException
- WindowManager.LayoutParams//android.view
- android.view.WindowManager API
- android.view.WindowManager$BadTokenException
- android.view.WindowManager$BadTokenException
- WindowManager: android.view.WindowLeaked:
- android.view.WindowManager$BadTokenException
- WindowManager: android.view.WindowLeaked
- 102.使用WindowManager在窗口上显示view
- 用WindowManager直接显示View
- 用WindowManager直接显示View
- android自定义view显示歌词
- android自定义view显示日历
- Android - 自定义View不显示
- android.view.WindowManager$BadTokenException错误(dialog使用的错误)
- android使用movie显示gif图片的自定义view
- SQL游标
- 字符串连接超长的解决wmsys.wm_concat()
- 选择,关于今天的难题
- Android系统权限和root权限大全
- 阿拉伯数字转换成大写的数字
- android使用WindowManager显示自定义View
- date 转化成Json 字符串
- C++中的临时对象都是const类型
- Disable Restart Now Message After Windows Automatic Update Message
- HDU 3584 三维树状数组
- 一小时近20亿实际http请求处理量
- 【制图】ArcGIS 标注语义换行
- poj 背包问题 提好汇总
- 关于GPIO的故事