java - 无法在 Android 中编辑裁剪后的照片

标签 java android image android-layout android-linearlayout

我正在构建一个 Android 应用程序,我必须在其中编辑从手机图库中选取并裁剪的图片。

所以在我的布局中,我有一个 ImageView 来放置裁剪后的图像

xml 文件

<ImageView
    android:id="@+id/ivEditPhoto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_weight=".90"
    android:src="@drawable/app_icon_big" />

将裁剪后的图像放置在 ImaveView 中

bitmapPic = (Bitmap) getIntent().getParcelableExtra(
            "CroppedBitmapImage");
picView = (ImageView) findViewById(R.id.ivEditPhoto);
        picView.setImageBitmap(bitmapPic);

图像放置正确。但问题是当我尝试编辑它时。 我有一个编辑按钮,单击该按钮后,我会执行以下操作,其中包括注册 On Touch Listener。

DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int height = displaymetrics.heightPixels;
        int width = displaymetrics.widthPixels;
        Bitmap alteredPastedBitmap = Bitmap.createBitmap(bitmapPic.getWidth(),
                bitmapPic.getHeight(), bitmapPic.getConfig());
        pasteCanvas = new Canvas(alteredPastedBitmap);
        paint = new Paint();
        paint.setColor(Color.GREEN);
        paint.setStrokeWidth(5);
        matrix = new Matrix();
        pasteCanvas.drawBitmap(bitmapPic, matrix, paint);
        picView.setOnTouchListener(this);

然后是下面的

public boolean onTouch(View v, MotionEvent event) {
    Toast.makeText(this, v.getId(), Toast.LENGTH_SHORT).show();
    if (v.getId() == R.id.ivEditPhoto) {

        Toast.makeText(this, "onTouch", Toast.LENGTH_SHORT).show();
        int action = event.getAction();
        x = event.getX();
        y = event.getY();
        switch (action) {
        case MotionEvent.ACTION_DOWN:
            sX = event.getX();
            sY = event.getY();
            break;
        case MotionEvent.ACTION_UP:
            if (skewedBitmap == null) {
                int resID = 0;
                if (imageId == 0)
                    resID = R.drawable.green_arrow;
                else
                    resID = imageId;
                bitmapToPaste = BitmapFactory.decodeResource(
                        getResources(), resID);
            } else {
                bitmapToPaste = skewedBitmap;
                skewedBitmap = null;
            }
            pasteCanvas.drawBitmap(bitmapToPaste, sX- (bitmapToPaste.getWidth() / 2),sY- (bitmapToPaste.getHeight() / 2), null);
            picView.invalidate();
            break;
        case MotionEvent.ACTION_CANCEL:
            break;
        default:
            break;
        }
    }
    return true;
}

问题是: bitmapPic.getWidth() 和 bitmapPic.getHeight() 为 160*160,onTouch event.getX();和 event.getY();尽管图像似乎占据了整个屏幕并且触摸位于图像上,但超出了坐标(例如:150.33 和 500.89)。所以 onTouch 不会放置位图并返回 false。 你们中有人可以指导我吗?

最佳答案

我在我的一个应用程序中遇到了同样的问题。我需要查看您的更多代码,但这可能与您需要实现的 onInterceptTouch() 方法有关。

如果情况并非如此,那么也许您可以查看此代码以获取有关如何移动、修改和旋转位图的帮助:

http://adblogcat.com/custom-view-to-draw-rotate-erase-and-convert-images-to-black-and-white/

顺便说一句,我编写了本教程,这是我的网站,我认为您遵循该教程比将其粘贴到此处更容易。

关于java - 无法在 Android 中编辑裁剪后的照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285771/

相关文章:

java - 在 Hibernate 一对一关系中保存外键的问题

java - JPA Criteria API - 如何从 JPA 获取单向 ManyToOne 关系的对立面

android - 使用 Robotium 关闭互联网连接

android - 可重用布局android的类

c# - 获取 RGB 类型 : sRGB or AdobeRGB in C#?

Java,第二 Material 交互不起作用?

java - 在提供的示例的上下文中,使用synchronized(this) 将方法划分为多个部分是否有助于提高性能?

java - 从移动设备到服务器的强大文件传输

javascript - 在不使用 Jquery 推送其他图像的情况下,在鼠标悬停时放大图像?

python : Making a negative image of a RGB picture