我想使用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。
答案 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);
}
注意:此代码尚未经过测试。