我相信你將不得不操縱與圖像對齊的節點位置。
您可以使用下面的代碼以編程方式將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座標相對於父。
希望它有幫助。
問候。
感謝您的回覆!我正在努力解決這個問題。我是否需要一個RelativeView?我在main_activity中使用了一個LinearView。我還擴展ImageView來創建一個Node類,它將保持onClickListener可能需要的特定於節點的內容。 – garlicman
我相信你將需要使用'RelativeLayout'。 「LinearLayout」預計子視圖將在屏幕中從上到下排列。 – Luis
嗯...所以我不得不添加一個onWindowFocusChanged()到我的ImageView,做了一個this.getLocationOnScreen()來保存圖像的X,Y。在OnCreate()X之後,Y是0,0。如果您想知道節點的位置,則無用。 – garlicman