2013-04-22 48 views
2

我需要將圖像(ImageViewer)分成塊,併爲它們分配onClick事件偵聽器。對於劃分的形象,我用下面的代碼:Android:如何將ImageView分成塊並將它們分配給ClickClickListener

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。我所做的是用大塊重建圖像,並能夠放大所選塊。

有什麼想法?

在此先感謝。

+0

怎麼樣設置ImageView的地方你想要顯示塊到OnTouchListener並從觸摸獲取x,y座標?這應該是可能的.... – Opiatefuchs 2013-04-22 11:18:16

回答

5

如果它是不能被分裂成複式圖像的單個圖像,你可以在Touch handler到添加到圖像查看和檢查X/Y COORDS

例如在你的觸摸處理

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()是你的方法,你可以操作觸摸... (在這裏你也可以使用float)

0

您可以使用網格視圖來製作圖像的塊並在其上設置onClickListener。

0

你真的需要分割圖像嗎?我只是將OnTouchListener設置爲整個圖像。從裏面,你可以得到觸摸事件的座標。然後你做一些數學計算,你應該能夠知道要放大的圖像的哪一部分。

相關問題