2011-04-07 66 views
8

嗨朋友 我正在創建一個應用程序,我把兩個視圖。首先是imageview,另一個是我的自定義視圖。在android中的縮放和平移視圖

我在自定義視圖上繪製圖像。我的自定義視圖代碼如下

public class DrawView extends ImageView{ 
    @SuppressWarnings("unused") 
    private static final String TAG = "DrawView"; 
    Painter painter = new Painter(); 
    PathStack pathStack; 
    private DrawApplication drawApplication; 

    public DrawView(Context context, AttributeSet attr) { 
     super(context,attr); 
     setFocusable(true); 
     setFocusableInTouchMode(true); 
     drawApplication=(DrawApplication)context.getApplicationContext(); 
     pathStack=drawApplication.getPainter().getPathStack(); 
     painter=drawApplication.getPainter(); 
     setScaleType(ScaleType.MATRIX); 

    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     float scaleFactor=drawApplication.getScaleFactor(); 
     canvas.scale(scaleFactor, scaleFactor,(float)getWidth()/2,(float)getHeight()/2); 
     List<DrawingPath> currentStack=pathStack.getCurrentStack(); 

     for (DrawingPath drawPath : currentStack) { 
      drawPath.draw(canvas, painter); 

     } 

    } 
} 

從代碼中明確就像drawapplication等存儲路徑很多事情

現在我們已經決定提供縮放和平移這一觀點。並且我的繪圖也應該隨後與imageview一起放大。

我也應該能夠正確繪製。

我試過畫布縮放,但這是最糟糕的,因爲縮放後我不能繪製到觸摸點,也更少繪製到屏幕導致更多的繪製視圖。

在小部件上繪圖也非常冗長任務導致性能下降。 PLZ提供任何方式。

而且我使用API​​級10

EDIT1

是朋友。我有一個想法。 我必須在不同的縮放級別繪製路徑。所以如果我們可以在不同的縮放級別下計算路徑比率,它將解決我的問題。 PLZ提供幫助據此

EDIT2

如果我們將能夠擴展路徑,然後如果我們繪製位圖不是我能解決我的問題

EDIT3

我認爲可以實現我的目標,但我的問題是調整位圖大小和提供不同縮放級別的位圖滾動

+0

對於平移,您可以使用View的框架進行滾動。如果你還想平滑滾動我已經回答[這裏](http://stackoverflow.com/questions/4951142/smooth-scrolling-in-android/4951681#4951681)(如果你不這樣做,你可以返回在'onDown()'中爲true,並省略'mScroller' /'onFling()'代碼)。對於縮放,我很抱歉,但我只用'ImageView'做到了。 – bigstones 2011-04-14 14:14:00

回答

0

我不認爲正常視圖可以放大。您可以捕獲觸摸事件並相應地縮放視圖窗口小部件。在SO

+0

可以給我提供任何示例代碼 – 2011-04-07 09:23:54

+0

我的本質是指MarvinLabs詳細指出的......這可能是唯一的方法。 – rajath 2011-04-07 09:45:28

+0

我剛剛編輯我的問題,我們可以通過這種方式獲得解決方案 – 2011-04-07 13:34:57

1

類似的問題:

可以在Honeycomb上進行(API拉特11),但不正確了。

+0

捏是不是我的問題,但我不想創建自定義視圖。我想提供縮放和平移到android標準視圖 – 2011-04-07 09:37:19

+0

無論你想通過捏或點擊一個按鈕來做到這一點,答案是一樣的。你不能在API <11. – 2011-04-07 09:40:23

+0

上做到這一點,我剛剛編輯我的問題,我們可以通過這種方式得到解決方案 – 2011-04-07 13:33:52