2011-05-11 44 views
0

我有一個圖像庫,我試圖啓用縮放縮放。另外,他們工作得很好。問題是,我不能爲了我的生活將他們兩個綁在一起!我試圖綁定ImageAdapter中的ImageZoomView,無濟於事。我應該在用戶點擊圖片時嘗試嗎?有沒有人有任何其他想法? 這是ImageAdapter.class返回畫廊元素的代碼:使用縮放實現圖庫

public View getView(int position, View convertView, ViewGroup parent) { 

    ImageView i = new ImageView(mContext); 
    Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(),mImageIds[position]); 
    i.setLayoutParams(new Gallery.LayoutParams(300, 450)); 
    i.setScaleType(ImageView.ScaleType.FIT_XY); 
    i.setBackgroundResource(mGalleryItemBackground); 
    i.setImageBitmap(bitmap); 
    return i; 
} 

這是我如何處理它MainActivity.class:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.gallery); 

     Gallery g = (Gallery) findViewById(R.id.gallery); 
     g.setAdapter(new ImageAdapter(this)); 

     Log.i("blah","e ok"); 

     g.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    //   mBitmap = ImageAdapter.mImageIds[position]; 



//    mZoomView = (ImageZoomView)findViewById(R.id.zoomview); 
//    mZoomView.setZoomState(mZoomControl.getZoomState()); 
//    mZoomView.setImage(mBitmap); 


//    Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

正如你所看到的,我試過的東西,但我的應用程序總是崩潰。這裏:(任何幫助,將不勝感激。

回答

2

你應該在getView方法創建ImageZoomView,假設ImageZoomView是你自己的子類的插件的ImageView的部件。

+0

我嘗試使用ImageZoomView代替ImageView的,但它墜毀。 :( – Lathspell 2011-05-11 09:17:07

+0

然後把你的問題的崩潰報告 – 2011-05-11 09:27:29

+0

好吧,我設法使用ImageZoomView而不是簡單的ImageView。捏縮放完美的作品,但現在,即使我可以在後臺看到畫廊框架,我不能使用滑動來移動所有圖片。*劉海頭對着牆壁* – Lathspell 2011-05-11 09:52:20

1

他們這樣,我已經處理了它是由子類畫廊和重寫OnScroll,OnFling和OnTouch將事件提供給scaledetector,並在im在圖片邊緣時將它們發送到超類,並在im沒有時翻譯圖片。請記住,這仍然在進行中,但它是這是我目前最接近的工作解決方案。

即使它可以工作,但它是「古怪的」。

private class ScaleListener extends 
     ScaleGestureDetector.SimpleOnScaleGestureListener { 

    @Override 
    public boolean onScale(ScaleGestureDetector detector) { 
     mScaleFactor = detector.getScaleFactor(); 
     mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f)); 
     Log.d(TAG, "" + mScaleFactor); 
     scale(mScaleFactor, detector.getFocusX(), detector.getFocusY()); 
     return true; 
    } 
} 

而且

public boolean onTouchEvent(MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      if (matrix == null) 
       matrix = new Matrix(); 
      matrix.set(getSelectedImageView().getImageMatrix()); 
     } else if (event.getAction() == MotionEvent.ACTION_UP 
       && event.getPointerCount() == 0) { 
      scrolling = 0; 
     } 

     mScaleDetector.onTouchEvent(event); 
     mGestureDetector.onTouchEvent(event); 
     return super.onTouchEvent(event); 
    } 

而且

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
     float distanceY) { 
    if (mScaleDetector.isInProgress()) { 
     scrolling = 0; 
     return true; 
    } else if (isAtRightEdge() && distanceX > 1) { 
     matrix.postTranslate(0, -distanceY); 
     getSelectedImageView().setImageMatrix(matrix); 
     scrolling += distanceX; 
     return super.onScroll(e1, e2, distanceX, distanceY); 
    } else if (isAtLeftEdge() && distanceX < -1) { 
     matrix.postTranslate(0, -distanceY); 
     getSelectedImageView().setImageMatrix(matrix); 
     scrolling += distanceX; 
     return super.onScroll(e1, e2, distanceX, distanceY); 
    } else { 
     if (scrolling < 0.1 && scrolling > -0.1) { 
      matrix.postTranslate(-distanceX, -distanceY); 
      getSelectedImageView().setImageMatrix(matrix); 
      return false; 
     } else { 
      matrix.postTranslate(0, -distanceY); 
      getSelectedImageView().setImageMatrix(matrix); 
      scrolling += distanceX; 
      return super.onScroll(e1, e2, distanceX, distanceY); 
     } 
    } 
}