2012-11-24 62 views
0

我一直在瀏覽Android教程和創建3D應用程序的例子。我的目標是創建一個應用程序,我可以顯示2D圖像,可以縮放/平移疊加的節點,以便爲上下文菜單觸摸節點。Android API平移/縮放ImageView和精靈覆蓋

我開始執行一個GLSurfaceView,但切換到一個自定義的ImageView,實現了捏縮放和平移觸摸監聽器。它適用於顯示,平移和縮放我的圖像。

我現在需要弄清楚如何在圖像上的特定座標處顯示節點(這將是圖像或精靈),並且當圖像被平移/縮放時,讓節點相應地移動和縮放。

這應該作爲主ImageView頂部的另一個視圖實現嗎?我假設我必須在處理ImageView的同時操作節點。

我也停留在API 10.任何想法將不勝感激。謝謝。

回答

1

我相信你將不得不操縱與圖像對齊的節點位置。

您可以使用下面的代碼以編程方式將ImageView添加到佈局中的特定位置(如果需要,還可以使用力大小)。

這只是一個例子,它使用了一個固定的drawable(你應該改變它作爲參數傳遞給方法)。你也可以改變它移動一個已經存在的視圖而不是添加。

private ImageView addImageView(RelativeLayout mainLayout, int x, int y, int width, int height, OnClickListener onClickListener){ 
    ImageView imageView = new ImageView(this); 
    imageView.setAdjustViewBounds(false); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.height = height; 
    params.width = width; 
    imageView.setLayoutParams(params); 
    imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    imageView.setImageDrawable(getResources().getDrawable(R.drawable.marker_red)); 
    //imageView.setBackgroundColor(Color.BLUE); 
    params.leftMargin = x - width/2; 
    params.topMargin = y - height/2; 
    imageView.setOnClickListener(onClickListener); 
    mainLayout.addView(imageView); 
    return imageView; 
} 

讓我知道你是否需要更多的細節。

--EDITED--

爲了得到父母的佈局中的位置,你可以,如果你使用的是API 11或以上使用getX()getY()

如果您對API < 11,那麼你可以使用獲得的原始位置(畫面中):

private boolean inViewBounds(View view, int x, int y){ 
    view.getDrawingRect(outRect); 
    view.getLocationOnScreen(location); 
    outRect.offset(location[0], location[1]); 
    return outRect.contains(x, y); 
} 

,你將需要減去父佈局的原始座標obation座標相對於父。

希望它有幫助。

問候。

+0

感謝您的回覆!我正在努力解決這個問題。我是否需要一個RelativeView?我在main_activity中使用了一個LinearView。我還擴展ImageView來創建一個Node類,它將保持onClickListener可能需要的特定於節點的內容。 – garlicman

+0

我相信你將需要使用'RelativeLayout'。 「LinearLayout」預計子視圖將在屏幕中從上到下排列。 – Luis

+0

嗯...所以我不得不添加一個onWindowFocusChanged()到我的ImageView,做了一個this.getLocationOnScreen()來保存圖像的X,Y。在OnCreate()X之後,Y是0,0。如果您想知道節點的位置,則無用。 – garlicman