2011-08-17 128 views
3

我想在我的應用程序中添加一張像路線圖圖像的圖像。 我想添加縮放功能到這個圖像以及圖像放大時的水平滾動。android中的縮放圖像

我寫了一些代碼,但它只允許縮放而不滾動。

代碼:

public class Zoom extends View { 
    private Drawable image; 
    private int zoomControler=20; 
    public Zoom(Context context) 
    { 
      super(context); 
      image=context.getResources().getDrawable(R.drawable.boothmap); 
      setFocusable(true); 

    } 
    protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      image.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler); 
      image.draw(canvas); 
    } 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 

      if(keyCode==KeyEvent.KEYCODE_DPAD_UP)// zoom in 
        zoomControler+=10; 
      if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // zoom out 
        zoomControler-=10; 
      if(zoomControler<10) 
        zoomControler=10; 

      invalidate(); 
      return true; 
    } 
} 

你能幫我解決這個問題。我的代碼到目前爲止還是你有更好的代碼?

+0

您需要平移或只是滾動。上面的代碼 – Ronnie 2011-08-17 13:09:59

+0

允許我縮放,但不能水平滾動...所以我想滾動 – Gaurav 2011-08-17 16:59:29

+0

你試過我的答案。如果它仍然無法正常工作,請嘗試。 – Ronnie 2011-08-17 17:07:44

回答

5

我的工作是:只需將內置縮放控件添加到webview,然後調用它的loadDataWithBaseURL方法。

webview.getSettings().setBuiltInZoomControls(true); 
webview.loadDataWithBaseURL("file:///android_asset/", "<img src='file:///android_res/drawable/example.png' />", "text/html", "utf-8", null); 
0

要修改的圖像邊界,而不是修改視圖邊界。嘗試修改視圖的高度和寬度。你應該可以滾動然後。

將需要覆蓋onMeasure()方法並將setMeasuredDimension設置爲當前的高度和寬度。保持高度和寬度作爲成員。

編輯:

class YourView extends View { 
static Bitmap mOrignalBitmap = null; // check n load in constructor. 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

     setMeasuredDimension(mWidth,mHeight); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Rect src = new Rect(0,0, originalWidth, originalHeight); 
     Rect dst = new Rect(viewLeft, viewTop, viewRight, viewBottom); 
     canvas.drawBitmap(mOrignalBitmap , src, dst, null); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

     if(keyCode==KeyEvent.KEYCODE_DPAD_UP)// zoom in 
       zoomControler+=10; 
     if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // zoom out 
       zoomControler-=10; 
     if(zoomControler<10) 
       zoomControler=10; 
     mWidth = //set view width with zoom 
     mHeight = // set view height with zoom. 
     requestLayout(); 

     return true; 
} 

} 
0

你會試圖通過處理與使用loadURL多點觸控得到非常糟糕的結果。嘗試this tutorial,它提供了我發現的最好的源代碼。如果你稍微調整一下代碼,你也可以使它在2.1上工作。