【问题标题】:How to draw a Line in ImageView on Android?如何在 Android 上的 ImageView 中画一条线?
【发布时间】:2017-01-02 17:26:11
【问题描述】:

我想知道当用户滑动手指时如何在 ImageView 上画一条线?

任何机构都可以解释一下吗?或者也许任何链接都可以开始。

【问题讨论】:

  • 你想画一条线或者在上面画点什么?

标签: android image imageview draw swipe


【解决方案1】:

您必须拥有自己的 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(); 函数

【讨论】:

  • 嗨,乔治,您的意思是在 onTouch() 事件上调用更新方法吗?很抱歉问了这么多,我是新来的。
  • 是的,我是认真的。没问题,你可以问你想要多少))
  • 您必须重写 OnTouchListener 并在您的 OnTouch 函数中调用无效
  • 我也有同样的问题。我试过了..但它对我不起作用..实际上我是这个android envrmnmt的新手..你能证明一下吗?还是我必须用我的所有代码再次提出我的问题?
  • 好的。它只需要进行 3 处更改 - 首先将 Paint p 添加为类的属性,然后在您的类构造函数中对其进行初始化,然后将 super.onDraw(canvas); 移动到您的绘图操作之上。这将允许您在原始图像上绘制。
【解决方案2】:

这是一个完整的示例,说明如何在另一个图像上绘制绿色矩形:

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 过度工程例程;-)。

【讨论】:

    【解决方案3】:

    为了绘制用户实际绘制的线,您必须重写 dispatchTouchEvent。从该事件中,您可以获取线的坐标并在 onDraw 中绘制它们,如 george 所示。

    http://developer.android.com/reference/android/app/Activity.html#dispatchTouchEvent(android.view.MotionEvent)

    【讨论】:

      【解决方案4】:

      查看 ApiDemos 示例 FingerPaint

      通过使用它,您可以通过触摸屏幕在 ImageView 上画线。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多