我试图用我创建的自定义视图显示Toast消息。 视图在背景上有一个位图,我想在上面写一些文字。
如果我将位图分配给主代码上的ImageView,我设法使其显示Toast t; (...)t.show(); 但是当我的类的onDraw()方法分配位图时,什么都没有显示出来。 我检查过,我的视图大小为(0,0),当我按照我的转录方式创建时。
请帮忙。Main.java
Toast t = new Toast(this);
LimitView lv = new LimitView(this);
t.setView(lv);
t.setDuration(Toast.LENGTH_LONG);
t.show();
LimitView.java
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
canvas.save();
canvas.setBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.limit));
canvas.restore();
}
答案 0 :(得分:1)
试试这段代码:
<强> Main.java 强>
Context context = this;
Toast t = new Toast(context);
LeftBorder lv = new LimitView(context);
t.setView(lv);
t.setDuration(Toast.LENGTH_LONG);
t.show();
<强> LimitView.java 强>
public class LimitView extends View {
public LimitView (Context context) {
super(context);
}
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.button_pressed), getMatrix(), new Paint());
}
}
答案 1 :(得分:1)
这里有几个错误。
BitmapFactory.decodeResource(getResources(), R.drawable.limit)
这是一项繁重的操作,不应处于视图绘制阶段。
canvas.setBitmap();
此方法不在画布上绘制位图,而是设置画布缓冲区以使用此位图。
尝试这样的事情:
public class MyView extends View{
private Bitmap bitmap;
public MyView(Context context) {
super(context);
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.limit);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(bitmap, 0, 0, null);
}
}
答案 2 :(得分:0)
replace this
canvas.setBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.limit));
到此:
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.button_pressed),left,top, new Paint());
这里左右两边是屏幕的位置。