【问题标题】:Android Studio ImageView onDrawAndroid Studio ImageView onDraw
【发布时间】:2016-09-19 08:33:51
【问题描述】:

我想使用 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 处理程序?

问候, 基里亚科斯。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    您可以通过编程方式或在布局中创建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 -&gt; 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);
         }
    

    注意:此代码未经测试。

    【讨论】:

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