Динамическое добавление растровых изображений в gridview в Android - PullRequest
1 голос
/ 27 декабря 2011

Я пытаюсь добавить растровые изображения в gridview, но постоянно получаю исключения. когда я пытаюсь сделать это в макетах, это работает нормально. Я не могу получить это. Вот код, который я делаю:

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

    GridView gv=(GridView)this.findViewById(R.id.gv);
    Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.logo);

    for (int i=0;i<3;i++)
    {
        for (int j=0;j<3;j++)
        {
            ImageView iv= new ImageView(this);
        //  iv.setId(i);
            Bitmap bm=Bitmap.createBitmap(src,j*(src.getWidth()/2),j*(src.getHeight()/3),src.getWidth()/3,src.getHeight()/3);
            iv.setImageBitmap(bm);
            gv.addView(iv);
        }
    }
}

Пожалуйста, любая помощь приветствуется:))

Ответы [ 3 ]

1 голос
/ 27 декабря 2011

Вот идея. Вы можете создать ImageAdapter и добавить функцию SetImages. Затем вы добавляете свой ImageAdapter в GridView, подготавливаете изображения и настраиваете через ImageAdapter. Для образца:

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

        GridView gridview=(GridView)this.findViewById(R.id.gridView);

        Integer[] mThumbIds = {
             R.drawable.logo, R.drawable.logo, R.drawable.logo,
             R.drawable.logo, R.drawable.logo, R.drawable.logo,
             R.drawable.logo, R.drawable.logo, R.drawable.logo,
             R.drawable.logo, R.drawable.logo, R.drawable.logo
       };

        ImageAdapter myAdapter = new ImageAdapter(this);
        myAdapter.SetImages(mThumbIds);
        gridview.setAdapter(myAdapter);
    }

    public class ImageAdapter extends BaseAdapter {
        private Context mContext;
        private Integer[] pics;

        public ImageAdapter(Context c) {
            mContext = c;
        }

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

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

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

        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                imageView = new ImageView(mContext);
                //You can set some params here
            } else {
                imageView = (ImageView) convertView;
            }
            imageView.setImageResource(pics[position]);
            return imageView;
        }

        public void SetImages(Integer[] id){
            pics = id.clone();
        }
    }

Не знаю, правильный ли это подход, но он работает: D

1 голос
/ 27 декабря 2011

для добавления данных в Gridview, вы должны установить адаптер

 gridview.setAdapter(adapter);

см. Пример http://developer.android.com/guide/tutorials/views/hello-gridview.html

0 голосов
/ 02 апреля 2013
public class ImageAdapter extends BaseAdapter 
{ 
    private Context context;
    private List<String> path_images = new ArrayList<String>();

    public ImageAdapter( Context context, List<String> path_images  ){ this.context = context; this.path_images = path_images; } 

    @Override public int    getCount (     ){ return images.size(); } 
    @Override public Object getItem  (int i){ return BitmapFactory.decodeFile( path_images.get(i) ); } 
    @Override public long   getItemId(int i){ return 0;             } 

    @Override public View getView(int i, View convertView, ViewGroup parent) 
    { 
        ImageView imageView = new ImageView( context ); 
        imageView.setImageBitmap( BitmapFactory.decodeFile( paht_images.get(i) ) );
        imageView.setScaleType( ImageView.ScaleType.CENTER_CROP ); 
        imageView.setLayoutParams(new GridView.LayoutParams( 145, 145 )); 
        return imageView; 
    } 
}   

private void present_all_images()
{
    final String FS = File.separator;
    final String directory = Environment.getExternalStorageDirectory().toString() + FS + "directory";

    List<String> path_images = new ArrayList<String>();

    path_images.add( directory + FS + "image01.png" );
    path_images.add( directory + FS + "image02.png" );
    path_images.add( directory + FS + "image03.png" );

    grid_data = (GridView)findViewById(R.id.gallery_grid_data);

    grid_data.setAdapter( new ImageAdapter( this, path_images ) );

    grid_data.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView<?> parent, View v, int position, long id)
    {   
    }});        

}
...