1

我有两个图像,图像 A 是背面的大背景,图像 B 是一个小图标,将合并到图像 A 的顶部。

这个怎么运作

用户从相机拍摄照片,这张照片将是图像 A。用户从布局中选择图标,即图像 B。选择图像 B 的图像后,用户可以在布局周围移动图像 B 进行调整图像 B 将覆盖在图像 A 之上的位置。

用户按下保存后,画布将在 A 上的两个图像 B 与用户想要的位置合并并将其保存到 SD 卡。

问题

我设法让图像 B 在布局中移动我不知道如何让它在图像 A 的位置合并。

这就是我为使图像 B 在布局中移动所做的工作。

img_additionalImage = (ImageView) findViewById(R.id.img_additionalImage);
    img_additionalImage.setOnTouchListener(new OnTouchListener()
    {
        @SuppressLint("NewApi")
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            switch (event.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    isImageMoving = true;
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (isImageMoving)
                    {
                        x = event.getRawX() - img_additionalImage.getWidth() / 2;
                        y = event.getRawY() - img_additionalImage.getHeight() / 2;
                        img_additionalImage.setX(x);
                        img_additionalImage.setY(y);
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    isImageMoving = false;
                    break;
            }
            return true;
        }
    });

我不知道如何将两个图像与用户选择的位置合并在一起。

4

1 回答 1

3

如果您使用 RealtiveLayout 或 LinearLayout 作为这 2 个图像视图的父布局,那么您可以通过这种方式捕获该视图..

view.setDrawingCacheEnabled(true);
Bitmap b = view.getDrawingCache();
b.compress(CompressFormat.JPEG, 95, new FileOutputStream("/some/location/image.jpg"));

视图是您的视图。95是JPG压缩的质量。文件输出流就是这样。

setDrawaingCacheEnabled 是什么?

启用或禁用图形缓存。启用绘图缓存后,下一次调用 getDrawingCache() 或 buildDrawingCache() 将在位图中绘制视图。启用缓存时,调用 draw(android.graphics.Canvas) 不会从缓存中绘制。要从缓存中受益,您必须通过调用 getDrawingCache() 请求绘图缓存,如果返回的位图不为空,则将其绘制在屏幕上。

启用绘图缓存类似于关闭硬件加速时设置图层。打开硬件加速时,启用绘图缓存对渲染没有影响,因为系统使用不同的加速机制来忽略该标志。如果您想为视图使用位图,即使启用了硬件加速,请参阅 setLayerType(int, android.graphics.Paint) 以获取有关如何启用软件和硬件层的信息。

来自Android 文档

于 2014-01-01T07:17:24.270 回答