2

我需要将图像(ImageViewer)分成块并为它们分配 onClick 事件侦听器。为了分割图像,我使用下面的代码:

private void splitImage(ImageView image, int rows, int cols) {  

    //For height and width of the small image chunks 
    int chunkHeight,chunkWidth;

    //To store all the small image chunks in bitmap format in this list 
    ArrayList<Bitmap> chunkedImages = new ArrayList<Bitmap>(rows * cols);

    //Getting the scaled bitmap of the source image
    BitmapDrawable drawable = (BitmapDrawable) image.getDrawable();
    Bitmap bitmap = drawable.getBitmap();
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true);

    chunkHeight = bitmap.getHeight()/rows;
    chunkWidth = bitmap.getWidth()/cols;

    //xCoord and yCoord are the pixel positions of the image chunks
    int yCoord = 0;
    for(int x=0; x<rows; x++){
        int xCoord = 0;
        for(int y=0; y<cols; y++){
            chunkedImages.add(Bitmap.createBitmap(scaledBitmap, xCoord, yCoord, chunkWidth, chunkHeight));
            xCoord += chunkWidth;
        }
        yCoord += chunkHeight;
    }       
}

但是有了这个函数,我只能得到一个位图数组,它们不接受 OnClickListener。我所做的是用块重建图像并能够放大选定的块。

任何想法?

提前致谢。

4

3 回答 3

5

如果它是无法拆分为多个图像的单个图像,您可以将 on Touch 处理程序添加到图像视图并检查 x/y 坐标

例如在您的触摸处理程序中

boolean onTouch(View v, MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        if (ev.getPointerCount() > 0) {
            int w = v.getWidth();
            int h = v.getHeight();
            float eX = ev.getX(0);
            float eY = ev.getY(0);
            int x = (int) (eX / w * 100);
            int y = (int) (eY / h * 100);
            // x and y would be % of the image.
            // so you can say cell 1 is x < 25, y < 25 for a 4x4 grid

            // TODO add a loop or something to use x and y to detect the touched segment
        }
    }
    return true;
}

您还可以将 int x 和 y 更改为浮动 x 和 y 更精确。

TODO 的示例代码

//somewhere in your code..
int ROWS = 5;
int COLS = 5;

// in the place of the TODO...
int rowWidht = 100/ROWS;
int colWidht = 100/COLS;

int touchedRow = x / rowWidth; // should work, not tested!
int touchedcol = y / colWidth; // should work, not tested!

cellTouched(touchedRow, touchedCol);

其中 cellTouched() 是您处理触摸的方法...(在这里您也可以使用浮点数)

于 2013-04-22T11:24:23.927 回答
0

您可以使用网格视图来制作大量图像并在其上设置 onClickListener。

于 2013-04-22T11:16:40.737 回答
0

你真的需要分割图像吗?我只想OnTouchListener为整个图像设置一个。从里面,你可以得到触摸事件的坐标。然后你做一些数学运算,你应该能够知道要放大图像的哪一部分。

于 2013-04-22T11:20:16.320 回答