在不移动叠加视图的情况下裁剪和缩放图像,而是在 ImageView 中移动图像
Posted
技术标签:
【中文标题】在不移动叠加视图的情况下裁剪和缩放图像,而是在 ImageView 中移动图像【英文标题】:Crop and Zoom Image without Moving Overlay View Instead Move Image in ImageView 【发布时间】:2014-08-05 11:51:33 【问题描述】:您好,我想在不移动叠加视图的情况下裁剪图像,而不是移动图像。
图像可以四处移动。我想在黑色边框内裁剪并保存如下所示的突出显示区域。
我有ImageView
和android:scaleType="matrix"
这是我的布局代码
<RelativeLayout
android:id="@+imageEdit/rl_ScaleImage"
android:layout_
android:layout_
android:layout_below="@+imageEdit/Topbar"
android:visibility="visible" >
<ImageView
android:id="@+imageEdit/imageView1"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:scaleType="matrix" />
<View
android:id="@+imageEdit/viewTop"
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:background="#99000000" />
<View
android:id="@+imageEdit/view_scaledImage"
android:layout_
android:layout_
android:layout_above="@+imageEdit/viewBottom"
android:layout_below="@+imageEdit/viewTop"
android:background="@drawable/rounded_corner_small" />
<View
android:id="@+imageEdit/viewBottom"
android:layout_
android:layout_
android:layout_alignParentBottom="true"
android:background="#99000000" />
</RelativeLayout>
ImageView
有 OnTouchListener
。图片可以放大或缩小,也可以在ImageView1
中移动。查看view_scaledImage
是我要裁剪和保存的区域。我该怎么做?
【问题讨论】:
那么问题出在哪里? @Mann 如何裁剪view_scaledImage
所涵盖的内容
How to crop an image in android?的可能重复
我也检查过,但这无法为我提供解决方案。请建议如何获得突出显示的坐标。你能提供一些代码吗
@Raj 你得到解决方案了吗?其实我也在寻找相同的..如果解决了,你能给我解决方案吗?提前致谢。
【参考方案1】:
最后我通过结合 Cropper 库和 PhotoView 库得到了解决方案。
https://github.com/rameshkec85/AndroidCropMoveScaleImage
【讨论】:
嗨 Ramesh Akula,我正在使用上面的库,它工作正常,但我面临一个问题。缩放时位图图像移动到叠加层之外?请帮助我提前致谢【参考方案2】:您可以使用cropimage 库。将此行添加到您的清单文件中:
<activity android:name="eu.janmuller.android.simplecropimage.CropImage" />
从图库或相机中选择图像并调用此函数:
public void runCropImage(String path)
Intent intent = new Intent(this, CropImage.class);
intent.putExtra(CropImage.IMAGE_PATH, path);
intent.putExtra(CropImage.SCALE, true);
intent.putExtra(CropImage.ASPECT_X, 2);//change ration here via intent
intent.putExtra(CropImage.ASPECT_Y, 2);
startActivityForResult(intent, REQUEST_CODE_CROP_IMAGE);//final static int 1
在你的onActivityResult
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
// gallery and camera ommitted
case REQUEST_CODE_CROP_IMAGE:
String path = data.getStringExtra(CropImage.IMAGE_PATH);
// if nothing received
if (path == null)
return;
// cropped bitmap
Bitmap bitmap = BitmapFactory.decodeFile(path);
imageView.setImageBitmap(bitmap);
break;
default:
break;
这个库也有缩放功能。检查我提到的链接中的示例
【讨论】:
让我给它一个机会【参考方案3】:这是获取任何视图相对于当前窗口的坐标的方法:
public Rect getViewPositionRelative(View v)
//Locate on screen
int[] location = new int[2];
view.getLocationInWindow(location); //change to getLocationOnScreen(location) for an absolute positioning
Rect rect = new Rect();
rect.left = location[0];
rect.top = location[1];
rect.right = rect.left + v.getWidth();
rect.bottom = rect.top + v.getHeight();
return rect;
使用此方法,您可以获得 ImageView 和叠加视图的面积,然后使用一些基础数学计算裁剪面积;)
【讨论】:
以上是关于在不移动叠加视图的情况下裁剪和缩放图像,而是在 ImageView 中移动图像的主要内容,如果未能解决你的问题,请参考以下文章