2010-10-21 3 views
3

Я пытаюсь создать галерею в своем Android-проекте, но не могу заставить ее работать так, как должно.Проблемы с макетом галереи

Вот что я пытаюсь сделать:

В принципе, я хочу галерею, которая отображает только один снимок, но по-прежнему имеет те же элементы управления (сдвинув влево и вправо). Я получаю фотографии асинхронно из Интернета.

Где я нахожусь?

Ну, на данный момент я просто пытаюсь отобразить галерею ... Я увижу шаг «один рисунок» после.

В чем моя проблема?

Ну ... Моя галерея не отображается на моем макете. Вообще.

В чем проблема?

информация

Log дают мне, что высота и widht моей галереи объекта являются ... 0.

Говоря о коде ...

layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:background="@drawable/fond"> 

    <ImageView android:background="@drawable/banniere" android:layout_height="wrap_content" android:layout_width="fill_parent"/> 

    <Gallery 
    android:id="@+id/gallery" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
/> 



</LinearLayout> 

Деятельность

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.galleryfullscreen); 

    Gallery gal = (Gallery) findViewById(R.id.gallery); 

    ArrayList<Photo> photos = (ArrayList<Photo>) this.getIntent().getExtras().getSerializable("Photos"); 
    int pos = this.getIntent().getExtras().getInt("Index"); 

    Log.i("Season",photos.toString()); 

    gal.setAdapter(new PhotoAdapter(this, photos, false)); 
    gal.setSelection(pos); 

    Log.d("Bottom", String.valueOf(gal.getBottom())); 
    Log.d("Right", String.valueOf(gal.getRight())); 
    Log.d("Width", String.valueOf(gal.getWidth())); 
    Log.d("Height", String.valueOf(gal.getHeight()));  
} 

Дополнения установлены правильно.

адаптер

общественного класса PhotoAdapter расширяет BaseAdapter {

private ArrayList<PhotoView> views; 
private ArrayList<Photo> season; 

public PhotoAdapter(Context c, ArrayList<Photo> images, boolean mini) { 

    season = images; 
    views = new ArrayList<PhotoView>(); 
    for (int i = 0; i < images.size() ; i++) 
     if (mini) 
     views.add(new PhotoView(c,images.get(i).getUrlMini(),false)); 
     else{ 

      views.add(new PhotoView(c,images.get(i).getUrlBig(),true)); 
     } 

} 

@Override 
public int getCount() { 
    return views.size(); 
} 

@Override 
public Object getItem(int position) { 
    return views.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    return views.get(position); 
} 

public ArrayList<Photo> getSeason() { 
    return season; 
} 

}

Этот адаптер работает отлично для других объектов (таких как GridView)

И PhotoView ...

общественный класс PhotoView e xtends ImageView {

Bitmap image; 

public PhotoView(Context context, String url, boolean Gallery) { 

    super(context); 
    if (!Gallery){ 
    this.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT,GridView.LayoutParams.WRAP_CONTENT)); 
    this.setScaleType(ImageView.ScaleType.FIT_CENTER); 
    this.setImageDrawable((getResources().getDrawable(R.drawable.blk))); 
    new DownloadImageTask().execute(url); 
    } 
    else{ 
     this.setLayoutParams(new Gallery.LayoutParams(100,100)); 
     this.setScaleType(ImageView.ScaleType.FIT_CENTER); 
     this.setBackgroundDrawable(((getResources().getDrawable(R.drawable.blk)))); 
     this.setImageDrawable((getResources().getDrawable(R.drawable.blk))); 
    } 

} 

public Bitmap getImage(){ 
    return image; 
} 

public void setImage(Bitmap img){ 
    image = img; 
    this.setImageBitmap(image); 
} 

То же самое, он отлично работает для сетки. С задачей загрузки, которая еще не настроена для Галереи. Я, по крайней мере, пытаюсь отобразить ressource, прежде чем устанавливать это, поэтому я уверен, что проблема не возникает здесь.

Sooo ... почему мои журналы показывают «0» для ширины и высоты галереи? LayoutParams установлены для объекта (я пробовал как XML, так и код), а также для внутренних представлений. Элементы создаются и вызывается метод getView. Я пробовал использовать LayoutParams здесь, ничего не меняя.

Я также попытался добавить часть xmlns: android = "http://schemas.android.com/apk/res/android" в макет галереи, ничего не меняя.

Я действительно не знаю, чего мне не хватает.Я попытался адаптировать множество учебников по объектам галереи, но все же ... не знаю! Если у вас есть представление о том, что я должен делать/попробуйте, пожалуйста ...

Спасибо всем!

Приветствия

ответ

2

Глядя на файл XML, я могу увидеть, что может быть проблемой. Ваш LinearLayout настроен на добавление представлений по горизонтали (по умолчанию), и ваше первое представление имеет свой layout_width, заданный для fill_parent.

Установите ориентацию в вертикальное положение в линейном режиме.

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="@drawable/fond"> 
+0

Ну, это трюк .. знал, что я что-то упустил! большое спасибо – Ours

Смежные вопросы