【问题标题】:Not able to Edit a cropped photo in Android无法在 Android 中编辑裁剪的照片
【发布时间】:2013-04-23 04:20:41
【问题描述】:

我正在构建一个 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。 有人可以指导我吗?

【问题讨论】:

    标签: java android image android-layout android-linearlayout


    【解决方案1】:

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

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

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

    顺便说一句,我编写了本教程,这是我的网站,我认为您可以更轻松地学习该教程,而不是将其粘贴到此处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多