裁剪和缩放图像没有移动叠加视图而是在ImageView中移动图像

时间:2014-08-05 11:51:34

标签: android imageview android-imageview crop

您好我想裁剪图像而不移动叠加视图而是移动图像。  enter image description here

图像可以四处移动。我想在黑色边框内裁剪并保存突出显示的区域,如下图所示。

ImageViewandroid: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>

ImageViewOnTouchListener。图像可以放大或缩小,也可以在ImageView1中移动。查看view_scaledImage是我要裁剪和保存的区域。我该怎么做?

4 个答案:

答案 0 :(得分:3)

最后,我通过组合Cropper库和PhotoView库获得了解决方案。

https://github.com/rameshkec85/AndroidCropMoveScaleImage

答案 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文件。使用真实设备测试相机,因为模拟器不能很好地处理相机。这是我项目的链接。

https://github.com/ozeetee/AndroidImageZoomCrop