如何解决draw()它不会绘制我的屏幕

时间:2018-09-04 20:37:01

标签: java android

我正在尝试在android studio中进行凝视跟踪。我试图在屏幕上画一个矩形到相应的凝视点。但是我的方法不起作用。我在android studio中没有任何绘画经验。 这是我的绘画课

let toggleMenu = (e) => {
  e.preventDefault();
  if (menu.classList.contains('slideup')) {
    menu.className = menu.className.replace('slideup', '');
    menu.className += ' slidedown';
    bottom.style.height = '440px';
  } else {
    menu.className = menu.className.replace('slidedown', '');
    menu.className += ' slideup';
    bottom.style.height = 'inherit';
  }
};

这是我找到viewbyid(“ Draw”)并更新var的方法:

public class drawMargins extends View {
    Paint paint;
    private volatile Margin margin;

public drawMargins(Context context) {
    super(context);
    init(null);
}

    public drawMargins(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init(attrs);
    }
    public drawMargins(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(attrs);
    }


    public void updateMargin(Margin margin2) {
        margin = margin2;
        postInvalidate();
    }


private void init(@Nullable AttributeSet set)
{

}

    @Override
    public void draw(Canvas canvas) {

    super.draw(canvas);
    if (margin==null)
        return;
    paint = new Paint();
    paint.setColor(Color.GREEN);

    canvas.drawRect(
    (float)((canvas.getWidth()/8)*margin.getX()),
    (float)((canvas.getHeight()/8)*margin.getY()),
    (float)((canvas.getWidth()/8)*margin.getX()+canvas.getWidth()/8),
    (float)((canvas.getHeight()/8)*margin.getY()+canvas.getHeight()/8),paint);
    }
}

我应该调用draw方法吗?用什么帆布?

2 个答案:

答案 0 :(得分:0)

尝试调用invalidate()中的postInvalidate()而不是updateMargins()。这将调用draw()并应绘制矩形。

答案 1 :(得分:0)

我建议您一次执行一个步骤。我不确切地知道您如何设置“活动”或“片段”,所以我也要经历一下。

为简单起见,让我假设只有活动,没有片段。您需要两个Java类来实现目标:DrawMarginsActivityDrawMargins

  1. DrawMarginsCustom View。自定义视图可帮助您创建自己的自定义工程图。请参阅此以获取更多详细信息:https://developer.android.com/training/custom-views/custom-drawing。您需要覆盖onDraw(Canvas canvas)方法。此方法具有canvas参数,您将在此画布上绘图。

  2. 现在,您需要将DrawMargins视图添加到DrawMarginsActivity中。您可以通过将此视图添加到DrawMarginsActivity的布局文件中来实现。然后,您可以通过DrawMargins获得对findViewById()视图的引用。

  3. 默认情况下,创建“活动”时,将调用DrawMargins的{​​{1}}方法并将其呈现。但是,如果要再次调用onDraw(),则必须调用onDraw()方法。这将使视图无效并为您调用DrawMargins.invalidate()方法。

  4. 我不确定您要对视图进行哪种操作。基于此,您需要调用onDraw()方法。