我想創建一個水平的圖像列表,用戶可以動態添加(和刪除),除了第一個(它像添加圖像按鈕一樣)。用戶將點擊第一個在左側添加更多圖片。如下所示,我創建了一個水平滾動和線性佈局,最初有一個NetworkImageView,它是圖像加法器按鈕。Android:動態創建的NetworkImageView的寬度和高度返回ZERO
的XML有:
...
<HorizontalScrollView
android:id="@+id/horizontal_scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<com.android.volley.toolbox.NetworkImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/imageViewAdd"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:background="@color/colorAccent"
android:contentDescription="@string/description" />
</LinearLayout>
</HorizontalScrollView>
...
代碼
然後,當用戶點擊該NetworkImageView,我想通過一個在它的一個前添加其他的。
...
// On create code
layout = (LinearLayout) findViewById(R.id.linear);
imageViewAdd = (NetworkImageView)findViewById(R.id.imageViewAdd);
ImageLoader imageLoader = CustomVolleyRequest.getInstance(this.getApplicationContext())
.getImageLoader();
imageLoader.get(Config.IMAGE_PATH_URL, ImageLoader.getImageListener(imageViewAdd,
R.drawable.image, android.R.drawable
.ic_menu_camera));
imageViewAdd.setImageUrl(Config.IMAGE_PATH_URL, imageLoader);
imageViewAdd.setOnClickListener(this);
totalImageCount = 0;
...
// Create and add new image view
NetworkImageView newView = new NetworkImageView(this);
newView.setId(id);
newView.setPadding(2, 2, 2, 2);
newView.setScaleType(ImageView.ScaleType.FIT_XY);
layout.addView(newView, id);
ImageLoader imageLoader = CustomVolleyRequest.getInstance(this.getApplicationContext())
.getImageLoader();
imageLoader.get(Config.IMAGE_PATH_URL, ImageLoader.getImageListener(newView,
R.drawable.image, android.R.drawable
.ic_dialog_alert));
newView.setImageUrl(Config.IMAGE_PATH_URL, imageLoader);
newView.requestLayout();
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
(int) getResources().getDimension(R.dimen.imageview_height), // 100 dp each
(int)getResources().getDimension(R.dimen.imageview_width));
newView.setLayoutParams(layoutParams);
...
在代碼後來,當我真正想要設置的圖像路徑,我讀的寬度和高度爲:
int targetW = newView.getWidth();
int targetH = newView.getHeight();
這兩者返回0。我看到很多在SO中的解決方案,但他們都沒有爲我工作(在我的代碼中,您可能會看到不同方法的殘留,我一直在嘗試過去3個小時!)。
任何幫助表示讚賞!
如果調用的getWidth()和getHeight()之前的佈局實際上是在屏幕上繪製,你會得到0,詳見這個答案http://stackoverflow.com/a/3594216/3533289 –
謝謝!我早些時候看到了答案。在創建並將視圖添加到佈局後,我調用getWidth()和getHeight()。這不足以將其繪製在屏幕上嗎? –
不可以。您可以使用ViewTreeObserver來確定在屏幕上確切地繪製視圖,然後將圖像添加到根視圖 –