在画布上绘制只需启动“活动”

时间:2019-02-07 16:34:40

标签: java android

我正在尝试从自定义视图在画布上绘制测试线。当我调用方法drawBeats()时,例如通过按一个按钮,它可以工作,但是我想在启动应用程序时通过drawBeats()的{​​{1}}执行MainActivity。这是我的自定义视图的相关行:

onCreate()

这就是我从 public MetronomeBar(Context context, AttributeSet attrs) { super(context, attrs); ... width = this.getWidth(); height = this.getHeight(); onMeasure(width, height); onSizeChanged(width, height,100, 100); onDraw(drawCanvas); } public void drawBeats() { drawPaint.setStrokeWidth(40); drawPaint.setColor(0xFFAAA9A9); drawCanvas.drawLine(0, 0, 0, 30, drawPaint); invalidate(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int desiredWidth = 100; int desiredHeight = 100; int widthMode = MeasureSpec.AT_MOST; int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.AT_MOST; int heightSize = MeasureSpec.getSize(heightMeasureSpec); //Measure Width if (widthMode == MeasureSpec.EXACTLY) { width = widthSize; } else if (widthMode == MeasureSpec.AT_MOST) { //MATCH_PARENT width = Math.max(desiredWidth, widthSize); } else { width = desiredWidth; } //Measure Height if (heightMode == MeasureSpec.EXACTLY) { height = heightSize; } else if (heightMode == MeasureSpec.AT_MOST) { //MATCH_PARENT height = Math.max(desiredHeight, heightSize); } else { height = desiredHeight; } //MUST CALL THIS setMeasuredDimension(width, height); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh){ super.onSizeChanged(w, h, oldw, oldh); canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); drawCanvas = new Canvas(canvasBitmap); } @Override protected void onDraw(Canvas canvas){ canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); } } 呼叫drawBeats()的方式:

MainActivity

我需要强制 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ... mBar = findViewById(R.id.mBar); ... mBar.drawBeats(); } onMeasure()onSizeChanged()才能在非空的画布上绘画。我也尝试在线程内部使用onDraw()。画布的背景从一开始就可见。 我只想在打开应用程序时画些东西,但必须在此特定画布上。

1 个答案:

答案 0 :(得分:0)

我认为这个codelab会有所帮助。您不得在构造函数中调用视图生命周期事件。

onMeasure(width, height); onSizeChanged(width, height,100, 100); onDraw(drawCanvas);

tutorial也会有用。