【问题标题】:Custom View into a Toast - doesn't draw自定义视图到 Toast - 不绘制
【发布时间】:2013-12-29 15:06:42
【问题描述】:

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

【问题讨论】:

  • "但是当我的类的 onDraw() 方法分配位图时,什么都没有显示"。这部分我不清楚。
  • @Raghunandan:意思是它不能像显示的那样工作
  • 你看不到图片
  • 我已经管理了@Raghunandan。检查 Ȃŵåiṩ ĸîŋg 解决方案

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


【解决方案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());
    }
}

【讨论】:

  • 有什么区别?以及发布的代码有什么问题
  • setBitmap 用于在画布中绘制可变位图。
  • @Ȃŵåiṩĸîŋg 我在问为什么它不起作用。 Babibu 的帖子解决了我的疑惑
  • ok :) 顺便说一句,如果您应该选择任何一个答案作为正确答案。
  • 好的...工作。因为我使用 API7 getMatrix() 不可用使用 drawBitmap(bmp, 0.0f, 0.0f, new Paint())
【解决方案2】:

这里有几个错误。

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

}

【讨论】:

    【解决方案3】:
    replace this 
    
    canvas.setBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.limit));
    

    到这里:

    canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.button_pressed),left,top, new Paint());
    

    这里左右是屏幕的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多