2013-11-29 32 views
0

我有一個位圖圖像數組加載使用哈里斯捲曲頁庫在https://github.com/harism/android_page_curl找到。我需要將縮放與手勢集成到每個位圖圖像上。我怎樣才能實現手勢放大。任何人都可以幫助我解決我面臨的一個核心問題。放大位圖圖像畫布與手勢android

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     lp = this; 
     util = new Utils(); 
     if (getLastNonConfigurationInstance() != null) { 
      index = (Integer) getLastNonConfigurationInstance(); 
     } 
     mCurlView = (CurlView) findViewById(R.id.curl); 
     mCurlView.setPageProvider(new PageProvider()); 
     mCurlView.setSizeChangedObserver(new SizeChangedObserver()); 
     mCurlView.setCurrentIndex(index); 
     // mCurlView.setBackgroundResource(R.drawable.icon); 
     imHome = (ImageView)findViewById(R.id.imHome); 
     imHome.setClickable(true); 
     imHome.setOnClickListener(lp); 
     btOne=(Button)findViewById(R.id.btOne); 
     btTwo=(Button)findViewById(R.id.btTwo); 
     btThree=(Button)findViewById(R.id.btThree); 
     btFour=(Button)findViewById(R.id.btFour); 
     llPageOne = (LinearLayout)findViewById(R.id.llPageOne); 
     btOne.setOnClickListener(this); 
     btTwo.setOnClickListener(this); 
     btThree.setOnClickListener(this); 
     btFour.setOnClickListener(this); 
     // This is something somewhat experimental. Before uncommenting next 
     // line, please see method comments in CurlView. 
     // mCurlView.setEnableTouchPressure(true); 
    } 
    @Override 
    public void onPause() { 
     super.onPause(); 
     mCurlView.onPause(); 
    } 
    @Override 
    public void onResume() { 
     super.onResume(); 
     mCurlView.onResume(); 
    } 
    @Override 
    public Object onRetainNonConfigurationInstance() { 
     return mCurlView.getCurrentIndex(); 
    } 
    /** 
    * Bitmap provider. 
    */ 
    private class PageProvider implements CurlView.PageProvider { 
     // Bitmap resources. 
     private int[] mBitmapIds = { 
       R.drawable.luxury,R.drawable.luxury1,R.drawable.luxury_two 
     }; 
     @Override 
     public int getPageCount() { 
      //return 5; 
      int pagesCount = 0; 
      DisplayMetrics displaymetrics = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
      int wwidth = displaymetrics.widthPixels; 
      int hheight = displaymetrics.heightPixels; 
      if(wwidth > hheight){ 
       if((mBitmapIds.length % 2) > 0) 
        pagesCount = (mBitmapIds.length/2) + 1; 
       else 
        pagesCount = mBitmapIds.length/2; 
      }else{ 
       pagesCount = mBitmapIds.length; 
      } 
      System.out.println("page count "+pagesCount); 
      return pagesCount; 
     } 
     private Bitmap loadBitmap(int width, int height, int index) { 
      Bitmap b = Bitmap.createBitmap(width, height, 
        Bitmap.Config.ARGB_8888); 
      b.eraseColor(0xFFFFFFFF); 
      Canvas c = new Canvas(b); 
      Drawable d = getResources().getDrawable(mBitmapIds[index]); 
      System.out.println("canvas width: "+c.getWidth()); 
      int margin = 3;//7 
      int border = 3;//2 
      Rect r = new Rect(margin, margin, width - margin, height - margin); 
      int imageWidth = r.width() - (border * 2); 
      int imageHeight = imageWidth * d.getIntrinsicHeight() 
        /d.getIntrinsicWidth(); 
      if (imageHeight > r.height() - (border * 2)) { 
       imageHeight = r.height() - (border * 2); 
       imageWidth = imageHeight * d.getIntrinsicWidth() 
         /d.getIntrinsicHeight(); 
      } 
      Log.d("TAG", String.valueOf(imageHeight)); 
      if (lp.getWindow().getWindowManager().getDefaultDisplay() 
        .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { 
       // portrait mode 
       r.left += ((r.width() - imageWidth)/2) - border; 
       r.right = r.left + imageWidth + border + border; 
      } else if (lp.getWindow().getWindowManager().getDefaultDisplay() 
        .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { 
       // landscape 
       r.left += ((r.width() - imageWidth)) - border-122; 
       r.right = r.left + imageWidth + border + border+122; 
      } 
      r.top += ((r.height() - imageHeight)/2) - border; 
      r.bottom = r.top + imageHeight + border + border; 
      Paint p = new Paint(); 
      p.setColor(0xFFC0C0C0); 
      c.drawRect(r, p); 
      r.left += border; 
      r.right -= border; 
      r.top += border; 
      r.bottom -= border; 
      d.setBounds(r); 
      d.draw(c); 
      return b; 
     } 
     @Override 
     public void updatePage(CurlPage page, int width, int height, int index) { 
      DisplayMetrics displaymetrics = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
      int wwidth = displaymetrics.widthPixels; 
      int hheight = displaymetrics.heightPixels; 
      if(wwidth > hheight){ 
       System.out.println("index "+(index*2)); 
       System.out.println("index2 "+(index*2)+1); 
       System.out.println("case landscape orientation..."); 
       if (index >0){ 
        front = loadBitmap(width, height, (index*2)); 
        back = loadBitmap(width, height, (index*2)+1); 
       }else { 
        front = loadBitmap(width, height, (index)); 
        back = loadBitmap(width, height, (index)); 
       } 
       System.out.println("MyActivity.onCreate debug message "+String.valueOf(index)); 
       Matrix matrix = new Matrix(); 
       matrix.preScale(-1.0f, 1.0f); 
       Bitmap mirroredBitmap = Bitmap.createBitmap(back, 0, 0, back.getWidth(), back.getHeight(), matrix, false); 
       page.setTexture(front, CurlPage.SIDE_FRONT); 
       page.setTexture(mirroredBitmap, CurlPage.SIDE_BACK); 
       //    if (mCurlView.getCurrentIndex()==0){ 
       // 
       //     showPage1(); 
       // 
       //    }else { 
       // 
       //     hidePage1(); 
       //    } 
       System.out.println("mCurlView.getCurrentIndex() "+mCurlView.getCurrentIndex()); 
      }else{ 
       System.out.println("case portrait orientation..."); 
       Bitmap front = loadBitmap(width, height, index); 
       Bitmap back = loadBitmap(width, height, index); 
       System.out.println("MyActivity.onCreate debug message "+String.valueOf(index)); 
       page.setTexture(front, CurlPage.SIDE_FRONT); 
       page.setTexture(back, CurlPage.SIDE_BACK); 
      } 
     } 
    } 
    /** 
    * CurlView size changed observer. 
    */ 
    private class SizeChangedObserver implements CurlView.SizeChangedObserver { 
     @Override 
     public void onSizeChanged(int w, int h) { 
      if (w > h) { 
       mCurlView.setViewMode(CurlView.SHOW_TWO_PAGES); 
       mCurlView.setMargins(.000f, .000f, .000f, .000f); 
      } else { 
       mCurlView.setViewMode(CurlView.SHOW_ONE_PAGE); 
       mCurlView.setMargins(.005f, .005f, .00f, .00f); 
      } 
     } 
    } 
    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch(v.getId()){ 
     case R.id.btOne: 
      util.sendUri(this, "http://google.com/"); 
      break; 
     case R.id.btTwo: 
      util.sendUri(this, "http://google.com/"); 
      break; 
     case R.id.btThree: 
      util.sendUri(this, "http://google.com/"); 
      break; 
     case R.id.btFour: 
      util.sendUri(this, "http://google.com/"); 
      break; 
     case R.id.imHome: 
      mCurlView.setCurrentIndex(0); 
      System.out.println("home pressed"); 
      mCurlView.onResume(); 
      break; 
     } 
    } 
    public void showPage1(){ 
     llPageOne.setVisibility(View.VISIBLE); 
    } 
    public void hidePage1(){ 
     llPageOne.setVisibility(View.GONE); 
    } 
    // @Override 
    // public void onBackPressed() { 
    //  // TODO Auto-generated method stub 
    // 
    //  startActivity (new Intent (this,MyActivityMenuActivity.class)); 
    // } 
    // 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.drop_list, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 
    /** 
    * Override function onOptionsItemSelected(MenuItem item) 
    * Identify the item 
    * Call super class's onOptionsItemSelected(MenuItem item) 
    */ 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(item.getItemId()==R.id.menu_option_one){ 
      startActivity (new Intent (this,ContactForm.class)); 
     } 
     return super.onOptionsItemSelected(item); 
    } 

回答

-1

覆蓋onTouchEvent(MotionEvent event)和創造的ScaleGestureDetector.OnScaleGestureListener一個實例來檢測放大事件。根據縮放比例繪製你的位圖

+0

你能否給我提供一個例子 – Dimitri

+0

這個職位[圖片縮放/平移內的圖庫](http://stackoverflow.com/questions/5011994/image-zooming-panning-inside -of-a-gallery/5013418#5013418] - 可以幫助你 – yushulx

+0

如何根據縮放比例繪製位圖 – Dimitri