【问题标题】:Android Drawing Line with 2 pointsAndroid 用 2 点画线
【发布时间】:2015-06-20 04:24:43
【问题描述】:

目前我正在开发一个应用程序,其中将通过单击位图按钮从一个点绘制到另一个点。 这是我在 MainActivity.java 中的代码:

    public class MainActivity extends Activity {
    LineView lineview;
    Button button;

    @Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   //lineview = (LineView)findViewById (R.id.lineView1);
   button = (Button)findViewById(R.id.btnCapture); 
   //lineview.setVisibility(View.INVISIBLE);
   button.setOnClickListener(new OnClickListener() {

       @Override
       public void onClick(View v) {

          // lineview.setVisibility(View.VISIBLE);
       }
   });


 }
}

LineView.java - 画线类

public class LineView extends View {
Paint paint = new Paint();

public LineView(Context context, AttributeSet attrs) {
  super(context, attrs);
  }

public LineView(Context context, AttributeSet attrs, int defstyle) {
super(context, attrs, defstyle );
  }


public LineView(Context context) {
super(context);
paint.setColor(Color.BLACK);
}

@Override
public void onDraw(Canvas canvas) {
    canvas.drawLine(0, 0, 20, 20, paint);
}

}

现在它使用定义的坐标从头开始绘制线。我希望使用在主要活动中声明的 2 个点的坐标来绘制线条。并且该功能应该在 onClick 之后起作用。 提前致谢。

【问题讨论】:

  • 使用ImageView 代替app.draw.line.LineView,然后使用ImageView.setBitmap(bitmap),其中bitmap 是您画线的位图。
  • 我绑在位图内画线,但只有黑屏。另外,现在我专注于在第二个答案的帮助下解决我的问题,但取得了一点进展
  • 使用Canvas.drawColor 用您选择的背景颜色填充整个位图。还可以尝试为BitmapImageView 指定大小。
  • 我的位图是一个图像。我试着在上面画一条线。所以声明了尺寸和颜色

标签: java android android-canvas


【解决方案1】:

通过扩展视图类来使用 customview 来实现: 让我们将您的自定义类称为 LineView。所以这就是 Line 的样子。

LineView.java

    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.view.View;

    public class LineView extends View {
    Paint paint = new Paint();

  public LineView(Context context, AttributeSet attrs) {
      super(context, attrs);
      }

    public LineView(Context context, AttributeSet attrs, int defstyle) {
    super(context, attrs, defstyle );
      }


    public LineView(Context context) {
    super(context);
    paint.setColor(Color.BLACK);
}

@Override
public void onDraw(Canvas canvas) {
        canvas.drawLine(0, 0, 20, 20, paint);
}

}

现在,您必须在 mainactivity 中实例化它。您可以使用 java 代码或 xml 来做到这一点。使用 java 代码将如下所示:

   import android.app.Activity;
   import android.graphics.Color;
   import android.os.Bundle;

 public class MainActivity extends Activity {
     LineView lineview;
     Button button;

     @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lineview = (LineView)findViewById (R.id.lineView1);
    button = (Button)findViewById(R.id.button1); 
    lineview.setVisibility(View.INVISIBLE);
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            lineview.setVisibility(View.VISIBLE);
        }
    });


  }
}

【讨论】:

  • 这段代码画了一条线,但在我的布局中没有这样做。我的意思是,我希望在单击按钮时画一条线,但该按钮仍然应该可见且处于活动状态。不过,这段代码设置了不同的视图。
  • 查看我编辑的答案。不要忘记从“自定义和库视图”下的调色板中将 lineview 对象添加到您的 xml。让我知道它是否有效。
  • 我已经更新了这个问题。代码给了我一个错误。
  • 和你的一样。也许我应该以某种方式编辑我的清单?
  • 检查我对 LineView 类的编辑响应...我已经添加了这些构造函数...
【解决方案2】:

您必须创建一个扩展View 的自定义视图类。在该类中,您将覆盖传递给画布的onDraw 方法。创建一个Paint 对象并将其与上面的drawLine 函数一起使用。

我建议您查看 Finger Paint 应用教程。网上至少有几个,很好的介绍了自定义视图和覆盖onDraw方法。

【讨论】:

  • 我明白了。我想澄清几件事:我在 MainActivity 中使用 onDraw?你知道任何具体的教程吗?我的意思是,我不是在创建绘画应用程序。我只想从 A 到 B 画一条线。
  • 你不会自己调用 onDraw。您覆盖 View 类的 onDraw 方法。我不能推荐一个具体的教程(这不是 SO 的主题),但如果你用谷歌搜索手指画应用程序,它会有很多选择。您可能不会自己制作手指绘画应用程序,但本教程将介绍自定义视图的基础知识,这是您绘制线条所需的内容
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
相关资源
最近更新 更多