2012-10-28 65 views
1

我已經下載了一堆圖像從互聯網上用下面的代碼:添加ImageViews到LinearLayout中

for(int i = 1; i < 12; i++) { 
    try { 
     URL imageURL = new URL("http://domain/drawimage.php?type=" + i + "&d1=" + this.d1 + "&d2=" + this.d2); 
     Bitmap image = BitmapFactory.decodeStream(imageURL.openConnection().getInputStream()); 

     bitmaps.add(image); 
    } catch (Exception e) { 
     System.out.println(e); 
     e.printStackTrace(); 
    } 
} 

後來當我嘗試將它們插入到一個LinearLayout中(ll),圖像不會出現即使bitmaps.size() = 11

for(int i = 0; i < bitmaps.size(); i++) { 
    ImageView iv = new ImageView(c); // c = getApplicationContext() 
    iv.setImageBitmap(bitmaps.get(i)); 
    iv.setVisibility(ImageView.VISIBLE); 

    ll.addView(iv); 
} 

如果我嘗試TextView,它的工作原理。

for(int i = 0; i < bitmaps.size(); i++) { 
    TextView tv = new TextView(c); // c = getApplicationContext() 
    tv.setText("image "); 
    tv.setGravity(Gravity.CENTER_HORIZONTAL); 

    ll.addView(tv); 
} 

加載問題還是插入失敗?怎麼修?

+3

在'bitmaps.get(i)'上添加'null'檢查並檢查。我猜你的'bitmaps'爲空。 –

+0

嘗試給ImageView提供適當的大小,它可能會崩潰。 –

+0

@MMohsinNaeem謝謝!我檢查了一下,然後我認爲出了什麼問題:應該產生圖像的PHP頁面出錯了。感謝幫助! – MikkoP

回答

0

我在打印出PHP側的圖片時遇到了問題。我也應該檢查一下。現在它正在工作。

0

從我的理解,你正試圖添加一個垂直linearlayout圖像列表?

我建議您使用帶有自定義佈局的ListView和ArrayAdapter。

下面是一個示例代碼,我做來幫助你:

public class MainActivity extends ListActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activitymain); 


     StrictMode.ThreadPolicy policy = new StrictMode. 
      ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 


     List<Bitmap> bitmaps= new ArrayList<Bitmap>(); 

     for(int i = 1; i < 12; i++) { 
      try { 
       URL imageURL = new URL("http://developer.android.com/assets/images/dac_logo.png"); 
       Bitmap image = BitmapFactory.decodeStream(imageURL.openConnection().getInputStream()); 

       bitmaps.add(image); 
      } catch (Exception e) { 
       System.out.println(e); 
       e.printStackTrace(); 
      } 
     } 

     setListAdapter(new BitmapAdapter(this,R.layout.listview_item,bitmaps)); 

    } 

定製BitmapAdapter:

public class BitmapAdapter extends ArrayAdapter<Bitmap>{ 

    Context context; 
     int layoutResourceId; 
     List<Bitmap> bitmaps; 

    public BitmapAdapter(Context context, int textViewResourceId, 
      List<Bitmap> objects) { 
     super(context, textViewResourceId, objects); 
     // TODO Auto-generated constructor stub 

     this.layoutResourceId = textViewResourceId; 
     this.bitmaps = objects; 
     this.context = context; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(this.layoutResourceId, parent, false); 
     ImageView iv = (ImageView) rowView.findViewById(R.id.imageView1); 

     iv.setImageBitmap(this.bitmaps.get(position)); 

     return rowView; 
    } 

} 

activitymain.xml:

<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@android:id/list"> 

</ListView> 

listview_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_launcher" /> 

0

我寫的代碼波紋管以編程方式添加ImageViewRelativeLayout。它可以很容易地改變與LinearLayout

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; 
} 

問候。