【发布时间】:2014-06-07 05:02:31
【问题描述】:
好的...这是我的情况。
我在 HorizontalScrollView 中有一个图片轮播 - 其中包含一个 LinearLayout - 在我的 Activity 中,如下所示:
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/slider"
android:scrollbars="none" >
<LinearLayout
android:id="@+id/carousel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
/>
</HorizontalScrollView>
我有一个TypedArray,循环遍历它,在每次运行时,以编程方式设置这些图像,添加一个 ClickListener 和一个标签,并将这个 ImageView 添加到 LinearLayout(在我的 Activity 布局中设置),就像这样:
// Get the array
final TypedArray carouselArray = getResources().obtainTypedArray(R.array.carousel_array);
// Populate the Carousel with item
for (int i = 0 ; i < carouselArray.length() ; ++i) {
// Image Item
ImageView outerImage;
// Set the image view resource
if(i == 0) {
outerImage.setImageResource(R.drawable.toy_filter_clear);
}
else {
outerImage.setImageResource(carouselArray.getResourceId(i, -1));
}
// Set Touch Listener
outerImage.setOnTouchListener(this);
final String prepend = "CAROUSEL_";
final String index = String.valueOf(i);
final String tag = prepend.concat(index);
outerImage.setTag(tag);
/// Add image view to the Carousel container
mCarouselContainer.addView(outerImage);
}
但是现在,我刚刚发现我必须以编程方式添加第二张图片,以在特定坐标处位于第一张图片的内部/顶部(该死的 UI 用户!)。我需要将它们本质上视为相同的图像/视图,因此我假设需要将它们打包在布局中。所以我做了一个布局文件,像这样:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/carousel_item"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/carousel_outer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/toy_filter_normal"
/>
<ImageView
android:id="@+id/carousel_inner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/carousel_outer"
android:layout_alignRight="@+id/carousel_outer"
android:layout_marginBottom="10dp"
android:layout_marginRight="5dp"
android:src="@drawable/thumb_nofilter"
/>
</RelativeLayout>
这具有正确的定位,并在其上设置了默认图像。所以我想要做的是进入布局文件,通过它们的 ID 获取 ImageViews,如有必要,覆盖图像,然后在循环结束时将 RelativeLayout 添加到我的 LinearLayout 中。 . 听起来很简单,对吧?
我的第一次尝试是这样做:
RelativeLayout item = (RelativeLayout) findViewById(R.id.carousel_item);
ImageView outerImage = (ImageView) item.findViewById(R.id.carousel_outer);
ImageView innerImage = (ImageView) item.findViewById(R.id.carousel_inner);
...但这给了我在 ImageView 上的 NullPointer...所以我首先尝试为 RelativeLayout 充气,如下所示:
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.carousel_item_layout, null);
ImageView outerImage = (ImageView) view.findViewById(R.id.carousel_outer);
ImageView innerImage = (ImageView) view.findViewById(R.id.carousel_inner);
这摆脱了 NPE,并且(显然)让我们像这样正确设置图像:
if(i == 0) {
outerImage.setImageResource(R.drawable.toy_filter_clear);
innerImage.setImageResource(0);
}
else {
outerImage.setImageResource(R.drawable.toy_filter_normal);
innerImage.setImageResource(carouselArray.getResourceId(i, -1));
}
但是当我尝试将 outerImage ImageView 添加回 LinearLayout 时,我在那里得到一个 NPE:
mCarouselContainer.addView(outerImage);
更重要的是,我不想只将一个 ImageView 添加到 LinearLayout/HorizontalScrollView - 我想以某种方式将生成的图像打包回 RelativeLayout 并将整个内容添加回我的 LinearLayout.. . 但是,值得一提的是,这也给了我一个 NPE。
男人要做什么?任何想法表示赞赏...
【问题讨论】:
标签: android android-layout android-linearlayout android-imageview android-relativelayout