2011-05-30 87 views

回答

8

您必须拥有自己的ImageView并覆盖onDraw函数。使用类似这样的东西

public class MyImageView extends ImageView{ 

    public MyImageView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); 
     canvas.drawLine(0, 0, 20, 20, p); 

    } 

} 

并在您的主类中创建对象MyImageView;当你触摸你的显示器调用update();函数

+0

嗨乔治,你的意思是调用onTouch()事件的更新方法?我很抱歉要求太多,我是新来的。 – user776550 2011-05-31 03:31:46

+0

是的,我的意思是。没问题,你可以问你想要多少)) – George 2011-05-31 05:39:21

+0

你必须重写OnTouchListener并在你的OnTouch函数中调用invalidate – George 2011-06-25 06:20:45

0

看看在ApiDemos样品FingerPaint

通过使用此功能,您可以通过触摸屏幕在ImageView上绘制线条。

4

这是你如何可以在另一个图像绘制绿色矩形一个完整的例子:

package CustomWidgets; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.util.AttributeSet; 

/** 
* Allows to draw rectangle on ImageView. 
* 
* @author Maciej Nux Jaros 
*/ 
public class DrawImageView extends ImageView { 
    private Paint currentPaint; 
    public boolean drawRect = false; 
    public float left; 
    public float top; 
    public float right; 
    public float bottom; 

    public DrawImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     currentPaint = new Paint(); 
     currentPaint.setDither(true); 
     currentPaint.setColor(0xFF00CC00); // alpha.r.g.b 
     currentPaint.setStyle(Paint.Style.STROKE); 
     currentPaint.setStrokeJoin(Paint.Join.ROUND); 
     currentPaint.setStrokeCap(Paint.Cap.ROUND); 
     currentPaint.setStrokeWidth(2); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     if (drawRect) 
     { 
      canvas.drawRect(left, top, right, bottom, currentPaint); 
     } 
    } 
} 

当你有这样的规定,你可以替换上述视图(部件)例如ImageView的:

<CustomWidgets.DrawImageView 
    android:id="@+id/widgetMap" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:src="@drawable/map_small" 
/> 

mapImageView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      DrawImageView drawView = (DrawImageView) v; 

      // set start coords 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       drawView.left = event.getX(); 
       drawView.top = event.getY(); 
      // set end coords 
      } else { 
       drawView.right = event.getX(); 
       drawView.bottom = event.getY(); 
      } 
      // draw 
      drawView.invalidate(); 
      drawView.drawRect = true; 

      return true; 
     } 
    }); 

然后你就可以在活动的触摸事件,控制布局用这个例子

当然,你可以制造一些getter和setter以及其他Java过度工程的例程;-)。