如何在Android的ImageView中画一条线?

问题描述

| 我想知道如何在用户滑动手指时在ImageView上画一条线吗? 有人可以解释吗?或也许有任何Link可以开始。     

解决方法

        您必须拥有自己的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,20,p);

    }

}
并在您的主类中创建对象
MyImageView
;当您触摸显示屏时,调用
update();
功能     ,        这是一个如何在另一个图像上绘制绿色矩形的完整示例:
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);
        }
    }
}
定义好之后,可以用上方的View(窗口小部件)替换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过度设计的例程;-)。     ,        为了绘制用户实际绘制的线条,您必须覆盖dispatchTouchEvent。从该事件中,您可以获取直线的坐标,并在onDraw中绘制它们,如乔治所示。 http://developer.android.com/reference/android/app/Activity.html#dispatchTouchEvent(android.view.MotionEvent)     ,        看看ApiDemos示例FingerPaint。 通过使用此功能,您可以通过触摸屏幕在ImageView上画线。