Android 将图形添加到现有视图
例如,如何向已绘制的视图添加线 我试着从draw方法中抓取画布并使用它来绘制,但它似乎不起作用Android 将图形添加到现有视图,android,Android,例如,如何向已绘制的视图添加线 我试着从draw方法中抓取画布并使用它来绘制,但它似乎不起作用 protected void onDraw(Canvas canvas) { super.onDraw(canvas); mCanvas = canvas; //drawing code here } public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) {
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mCanvas = canvas;
//drawing code here
}
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStrokeWidth(10);
paint.setStyle(Style.FILL);
mCanvas.drawLine(0, 0, 50, 50, paint);
}
}
}
执行以下步骤:
ACTION\u DOWN
时将其设置为trueinvalidate()
调用onDraw()
中,如果标志为真,则画线更多信息可以在我的博客上找到你想做的事情最好是使用。基本上,drawable是一个封装图形信息的对象,这些信息可以更新并易于重用。i、 e
public class LineDrawable extends Drawable {
private int mStartX;
private int mStartY;
private int mEndX;
private int mEndY;
private final Paint mPaint;
public LineDrawable() {
mPaint = new Paint();
mPaint.setColor(Color.RED);
}
public void setLineCoordinates(final int startX, final int startY,
final int endX, final int endY) {
mStartX = startX;
mStartY = startY;
mEndX = endX;
mEndY = endY;
}
public void setColor(final int color){
mPaint.setColor(color);
}
@Override
public void setColorFilter(final ColorFilter colorFilter) {
mPaint.setColorFilter(colorFilter);
}
@Override
public void setAlpha(final int alpha) {
mPaint.setAlpha(alpha);
}
@Override
public void draw(final Canvas canvas) {
canvas.drawLine(mStartX, mStartY, mEndX, mEndY, mPaint);
}
@Override
public int getOpacity() {
return PixelFormat.OPAQUE;
}
public void setSize(final int size){
mPaint.setStrokeWidth(size);
}
}
public class YourView extends View{
private LineDrawable mLineDrawable;
public YourView(final Context context){
mLineDrawable = new LineDrawable();
}
.......
@Override
protected void onDraw(final Canvas canvas){
super.onDraw(canvas);
mLineDrawable.draw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
mLineDrawable.setColor(Color.BLUE);
mLineDrawable.setLineCoordinates(0, 0, event.getX(), event.getY());
}
}
}
}
对于糟糕的格式设置,很抱歉,粘贴它似乎把它搞砸了。尝试在视图上调用invalidate()。确定。所以我需要在onDraw()方法中执行所有操作。没有办法在它之外添加绘图?没有,要理解为什么你应该理解android的绘图过程。我会更新我的答案,简单解释一下。谢谢。我也会用这个。但是,如果我,比如说,想为拉伸线添加控制柄,我仍然需要在这个视图的onDraw()方法中操纵这个视图,就像上面提到的WarrenFaith一样。此外,还需要在onTouchEvent的末尾调用this.invalidate()来取消绘制线。是的,这里也需要调用invalidate,我的错是漏掉了它。如果您想添加句柄-这应该是另一个具有适当onTouchListener集的视图。