1

我正在构建一个 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。你们中的任何人都可以指导我吗?

4

1 回答 1

0

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

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

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

顺便说一句,我写了这个教程,这是我的网站,我认为你更容易理解这个教程,而不是把它粘贴在这里。

于 2013-04-22T20:20:41.203 回答