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);
}
}
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使用design:25.1.0及以上包后,使用自定义behavivor(上拉隐藏,下拉显示)的view隐藏后不再显示的问题
- android中使用自定义View让图片像画卷一样被展开显示
- Android自定义Toast,指定Toast信息显示的位置并使用Toast显示其他View
- Android中使用自定义selector来实现view的点击效果以及view的显示样式
- Android 在ViewPager中使用的可以画线,放大,保存,点击删除线条的自定义图片显示控件
- android使用movie显示gif图片的自定义view
- Android中使用自定义View实现下载进度的显示
- Android TextView与html的结合使用 一个控件显示多种文字
- android canvas\paint\path简单使用(自定义view必学)
- Android 自定义View使用示例(二)
- android自定义viewGroup 不显示问题
- 【Android开源项目分析】自定义圆形头像CircleImageView的使用和源码分析
- Android WebView自定义处理错误页面显示
- Android自定义View实现图片显示,并实现缩放、拖拽、切换功能
- Android WebView自定义处理错误页面显示(404等)
- android中自定义WebView显示网页或本地html文件
- Android 自定义View的一些使用技巧
- Android开发_WebView组件使用详解_LoadUrl直接显示网页内容
- android自定义Spinner下拉菜单和AutoCompleteTextView自动显示的(下拉列表框)样式
- Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment)