我有两个图像,图像A是背面的大背景,图像B是一个小图标,将合并在图像A的顶部。
工作原理
用户从相机拍摄照片,这张照片将是图片A. 用户从布局中选择图标,即图像B. 在为图像B选择图像之后,用户可以在布局周围移动图像B,以调整图像B将叠加在图像A顶部的位置。
在用户按下保存之后,画布将合并两个图像,B在A顶部,与用户想要的位置合并,并将其保存到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;
}
});
我不知道如何将两张图片合并到用户选择的位置。
答案 0 :(得分:3)
如果您使用RealtiveLayout或LinearLayout作为此2 imageview的父布局,则可以通过这种方式捕获该视图。
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) 有关如何启用软件和硬件层的信息。