您好我想裁剪图像而不移动叠加视图而是移动图像。
图像可以四处移动。我想在黑色边框内裁剪并保存突出显示的区域,如下图所示。
我ImageView
与android:scaleType="matrix"
这是我的布局代码
<RelativeLayout
android:id="@+imageEdit/rl_ScaleImage"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_below="@+imageEdit/Topbar"
android:visibility="visible" >
<ImageView
android:id="@+imageEdit/imageView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:scaleType="matrix" />
<View
android:id="@+imageEdit/viewTop"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_alignParentTop="true"
android:background="#99000000" />
<View
android:id="@+imageEdit/view_scaledImage"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+imageEdit/viewBottom"
android:layout_below="@+imageEdit/viewTop"
android:background="@drawable/rounded_corner_small" />
<View
android:id="@+imageEdit/viewBottom"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:layout_alignParentBottom="true"
android:background="#99000000" />
</RelativeLayout>
ImageView
有OnTouchListener
。图像可以放大或缩小,也可以在ImageView1
中移动。查看view_scaledImage
是我要裁剪和保存的区域。我该怎么做?
答案 0 :(得分:3)
最后,我通过组合Cropper库和PhotoView库获得了解决方案。
答案 1 :(得分:0)
您可以使用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;
}
}
此库也具有缩放功能。检查我提到的链接中的示例
答案 2 :(得分:0)
这是如何获取与当前Window相关的任何View的坐标:
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和叠加视图的区域,然后使用一些基础数学计算裁剪区域;)
答案 3 :(得分:0)
您需要组合Cropper库和PhotoView。我为我的项目创建了完全相同的东西,添加了从相机或图库中选择图像的功能。在Github上共享代码。在项目中添加了一个apk文件。使用真实设备测试相机,因为模拟器不能很好地处理相机。这是我项目的链接。