Ошибка рисования галереи Android - PullRequest
1 голос
/ 09 июля 2011

Я пытаюсь реализовать пример галереи Android из http://developer.android.com/resources/tutorials/views/hello-gallery.html

Я получаю эту ошибку в следующих строках

       R.drawable.sample_1 cannot be resolved
        R.drawable.sample_2 cannot be resolved,
        R.drawable.sample_3 cannot be resolved,
        R.drawable.sample_4 cannot be resolved,
        R.drawable.sample_5 cannot be resolved,
        R.drawable.sample_6 cannot be resolved,
        R.drawable.sample_7 cannot be resolved

Как решить эту проблему. Код показан ниже

HelloGallery.java

  package com.HelloGallery;

  import android.app.Activity;
  import android.content.Context;
  import android.content.res.TypedArray;
  import android.os.Bundle;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.AdapterView;
  import android.widget.BaseAdapter;
  import android.widget.Gallery;
  import android.widget.ImageView;
  import android.widget.Toast;
  import android.widget.AdapterView.OnItemClickListener;
  import android.R.drawable;

  public class HelloGalleryActivity extends Activity {
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     Gallery g = (Gallery) findViewById(R.id.gallery);
     g.setAdapter(new ImageAdapter(this));

     g.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(AdapterView parent, View v, int position, long id) {
        Toast.makeText(HelloGalleryActivity.this, "" + position, Toast.LENGTH_SHORT).show();
         }
     });


      }

      public class ImageAdapter extends BaseAdapter {
     int mGalleryItemBackground;
     private Context mContext;

     private Integer[] mImageIds = {
        R.drawable.sample_1,
        R.drawable.sample_2,
        R.drawable.sample_3,
        R.drawable.sample_4,
        R.drawable.sample_5,
        R.drawable.sample_6,
        R.drawable.sample_7
     };

     public ImageAdapter(Context c) {
         mContext = c;
         TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);
         mGalleryItemBackground = a.getResourceId(
            R.styleable.HelloGallery_android_galleryItemBackground, 0);
         a.recycle();
     }

     public int getCount() {
         return mImageIds.length;
     }

     public Object getItem(int position) {
         return position;
     }

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

     public View getView(int position, View convertView, ViewGroup parent) {
         ImageView i = new ImageView(mContext);

         i.setImageResource(mImageIds[position]);
         i.setLayoutParams(new Gallery.LayoutParams(150, 100));
         i.setScaleType(ImageView.ScaleType.FIT_XY);
         i.setBackgroundResource(mGalleryItemBackground);

         return i;
     }
      }
  }

main.mxml

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      >
  <TextView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/hello"
      />
      <Gallery xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/gallery"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
  />
  </LinearLayout>

attrs.mxml

  <?xml version="1.0" encoding="utf-8"?>
  <resources>
      <declare-styleable name="HelloGallery">
     <attr name="android:galleryItemBackground" />
      </declare-styleable>
  </resources>

R.java

  /* AUTO-GENERATED FILE.  DO NOT MODIFY.
   *
   * This class was automatically generated by the
   * aapt tool from the resource data it found.  It
   * should not be modified by hand.
   */

  package com.HelloGallery;

  public final class R {
      public static final class attr {
      }
      public static final class drawable {
     public static final int icon=0x7f020000;
      }
      public static final class id {
     public static final int gallery=0x7f050000;
      }
      public static final class layout {
     public static final int main=0x7f030000;
      }
      public static final class string {
     public static final int app_name=0x7f040001;
     public static final int hello=0x7f040000;
      }
      public static final class styleable {
     /** Attributes that can be used with a HelloGallery.
        <p>Includes the following attributes:</p>
        <table>
        <colgroup align="left" />
        <colgroup align="left" />
        <tr><th>Attribute</th><th>Description</th></tr>
        <tr><td><code>{@link #HelloGallery_android_galleryItemBackground com.HelloGallery:android_galleryItemBackground}</code></td><td></td></tr>
        </table>
        @see #HelloGallery_android_galleryItemBackground
      */
     public static final int[] HelloGallery = {
         0x0101004c
     };
     /**
       <p>This symbol is the offset where the {@link com.HelloGallery.R.attr#android_galleryItemBackground}
       attribute's value can be found in the {@link #HelloGallery} array.
       @attr name android:android_galleryItemBackground
     */
     public static final int HelloGallery_android_galleryItemBackground = 0;
      };
  }

1 Ответ

2 голосов
/ 09 июля 2011

В вашей папке / res / drawable нет файлов с именами

sample_1.png ... _7 и т. Д.

Это необходимо для заполнения виджета, вы заявляете, что используете их здесь:

 private Integer[] mImageIds = {
    R.drawable.sample_1,
    R.drawable.sample_2,
    R.drawable.sample_3,
    R.drawable.sample_4,
    R.drawable.sample_5,
    R.drawable.sample_6,
    R.drawable.sample_7
 };

Это массив целых чисел, каждое целое число - это идентификатор, относящийся к рисуемому ресурсу, который вы должны были создать в папке / res / drawable.

Если вы хотите, чтобы он работал быстро, просто скопируйте и вставьте файл icon.png, который уже находится в папке / drawable /, и переименуйте в pastep sample_1.png, sample_2.png, sample_3.png и т.д.

Если бы у вас были эти файлы, они были бы связаны в вашем файле класса R.java

...