Android Studio ImageView onDraw

时间:2016-09-19 08:33:52

标签: android android-layout

我想使用onDraw处理程序在Imageview上绘图。 我找到了以下示例,其中在ImageView(使用Eclipse创建)上绘制了对角线:

package de.carpelibrum.grafik;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.ImageView;

public class ZeichnenView extends ImageView {
    public ZeichnenView(Context context, AttributeSet attrs) {
        super(context, attrs);      
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint pinsel = new Paint();
        pinsel.setColor(Color.rgb(64, 64, 255));
        pinsel.setStrokeWidth(5);
        canvas.drawLine(0, 0, getWidth(), getHeight(), pinsel);
    }
}

我将相应的项目导入Android Studio并且运行良好。

现在,当我想在Android Studio中创建类似的示例项目时,我将首先通过在屏幕上手动放置ImageView来设计布局。 我的问题:如何实现一个使用此ImageView的onDraw处理程序?

此致 KYRIAKOS。

1 个答案:

答案 0 :(得分:0)

您可以以编程方式或在布局中制作ImageView。这个答案是从Android - Canvas drawLine inside ImageView

开发的

以编程方式看起来像这样:

ImageView imageView;

 @Override
 public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      LinearLayout layout = (LinearLayout) findViewById(R.id.root_layout);
        imageView = new ImageView(this);
        imageView.setId("lineImage");
        LinearLayout.LayoutParam params = (new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        imageView.setLayoutParams(params);
        layout.addView(imageView);
        DrawOnImage(positionx, positiony, width, height, Color.BLACK);

}

private void DrawOnImage(float x, float y, float xend, float yend, int color) {

    bmp = Bitmap.createBitmap(imageView.getWidth(), imageView.getHeight(), Config.ARGB_8888);
    canvas = new Canvas(bmp);
        imageView.draw(canvas);

    Paint p = new Paint();
    p.setColor(color);
    canvas.drawLine(x, y, xend, yend, p);
    imageView.setImageBitmap(bmp);
}

基于布局的方法看起来像这样:

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/lineImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/image_src"/>

</LinearLayout>

并且在Activity内你会做类似于顶部的事情,但不是创建View,而是在resources -> layout目录中找到它。

     @Override
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          ImageView imageView = (ImageView) findViewById(R.id.lineImage);
          DrawOnImage(positionx, positiony, width, height, Color.BLACK);
     }

注意:此代码尚未经过测试。