Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:使用画布在imageview上绘制_Java_Android_Button_Geometry_Ondraw - Fatal编程技术网

Java Android:使用画布在imageview上绘制

Java Android:使用画布在imageview上绘制,java,android,button,geometry,ondraw,Java,Android,Button,Geometry,Ondraw,现在我有一个显示图像的活动。我希望能够在图像上画一个圆。“绘制”按钮应该在图像上绘制一个圆,但由于某种原因,它会覆盖原始位图,而不是在其上绘制 如何使按钮在原始位图/图像视图上画一个圆圈,而不是制作一个全新的圆圈 public class ImageDisplayActivity extends FragmentActivity { public static final String KEY_PATH = "img.jpg"; private ZoomInZoomOut to

现在我有一个显示图像的活动。我希望能够在图像上画一个圆。“绘制”按钮应该在图像上绘制一个圆,但由于某种原因,它会覆盖原始位图,而不是在其上绘制

如何使按钮在原始位图/图像视图上画一个圆圈,而不是制作一个全新的圆圈

public class ImageDisplayActivity extends FragmentActivity {

    public static final String KEY_PATH = "img.jpg";
    private ZoomInZoomOut touch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_display);
        Intent intent = getIntent();
        String path = getIntent().getStringExtra(ImageDisplayActivity.KEY_PATH);
        try {
            java.io.FileInputStream in = this.openFileInput(path);
            Bitmap bitmap = BitmapFactory.decodeStream(in);
            touch = (ZoomInZoomOut) findViewById(R.id.IMAGEID);
            touch = arrangeImageView(touch);
            touch.setImageBitmap(bitmap);
            in.close();
            Button draw = (Button) findViewById(R.id.draw);
            draw.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Bitmap imageBitmap = Bitmap.createBitmap(200,
                            200, Bitmap.Config.ARGB_8888);
                    Canvas canvas = new Canvas(imageBitmap);
                    Paint p = new Paint();
                    p.setAntiAlias(true);
                    p.setColor(Color.BLUE);
                    p.setStyle(Paint.Style.STROKE);
                    canvas.drawCircle(100, 100, 5, p);
                    touch.setImageBitmap(imageBitmap);
                }
            });
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    private ZoomInZoomOut arrangeImageView(ZoomInZoomOut img) {
        try {
            img.setRotation(90);
            img.setScaleX(1.8f);
            img.setScaleY(1.8f);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return img;
    }
}

SetImageBitmap将当前位图替换为新位图。它不会在上面画。解决此问题的最简单方法是从图像视图中获取位图,将其绘制到imageBitmap,然后将圆圈绘制到imageBitmap。

就代码而言,如何将位图绘制到imageBitmap?canvas.drawBitmap(originalBitmap)。如果没有原始位图,请使用绘图缓存或imageView.getDrawable和drawable.draw(画布)