3

现在我正在开发可以在onClick. 我在LineView.java课堂上画线并onClickMainActivity.java. 为了解决这个问题,我检查了类似的问题。第一个解决方案:

LineView.onDraw();

它给了我这个错误:

Multiple markers at this line
    - The method onDraw(Canvas) in the type LineView is not applicable for the 
     arguments ()
    - Suspicious method call; should probably call "draw" rather than "onDraw"

我也尝试在 MainActivity 中编写:

LineView lineView = new LineView(null);
lineView.onDraw();

但它也给出了一个错误:

Multiple markers at this line
    - The method onDraw(Canvas) in the type LineView is not applicable for the 
     arguments ()
    - Suspicious method call; should probably call "draw" rather than "onDraw"

这是我的 LineView.java:

public class LineView extends View {
Paint paint = new Paint();
Point A;
Point B;
boolean draw = false;

public void onCreate(Bundle savedInstanceState) {

}

public LineView(Context context, AttributeSet attrs) {
  super(context, attrs);
  }

public LineView(Context context, AttributeSet attrs, int defstyle) {
super(context, attrs, defstyle );
  }


public LineView(Context context) {
super(context);
paint.setColor(Color.BLACK);
}

@Override
public void onDraw(Canvas canvas) {
    draw = MainActivity.draw;
    if(draw){
    //A = (getIntent().getParcelableExtra("PointA"));
    A = MainActivity.A;
    B = MainActivity.B;

    canvas.drawLine(A.x, A.y, B.x, B.y, paint);
    }
}

private Intent getIntent() {
    // TODO Auto-generated method stub
    return null;
}

}

我的MainActivity.java onClick

 @Override
       public void onClick(View v) {
           draw = true;
                       LineView.onDraw();
                     }
   });

提前致谢!

4

1 回答 1

0

您不应该直接在任何视图上调用 onDraw()。如果视图可见并且在视图层次结构中,则视图会自行绘制。如果您需要视图自行绘制,因为某些内容发生了变化(例如您的 A 和 B 变量),那么您应该执行以下操作:

LineView.invalidate();

invalidate() 告诉 UI 系统视图已更改,并且应在不久的将来(可能是 UI 线程的下一次迭代)的某个时间调用 onDraw()。

我认为您的“绘制”变量可能是不必要的。如果您有时想隐藏视图,请改用 setVisibility()。

于 2015-06-21T03:32:54.380 回答