自定义视图到吐司 - 不绘制

时间:2013-12-29 15:06:42

标签: android bitmap android-canvas toast custom-view

我试图用我创建的自定义视图显示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();
}

3 个答案:

答案 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());

这里左右两边是屏幕的位置。