0

利用可能な写真の数に応じて、イメージビューまたはギャラリーを使用します。利用可能な画像が 1 つしかない場合は、imageview を使用します。これは魅力的に機能します。u niversalloaderのイメージローダーを使用します。画像は全幅で画面の上部にあります。

複数の写真がある場合は、ギャラリーをページリンディケーターと共に使用します。小さい画面ではこれで問題なく動作します。しかし、タブレットでは、画像が全画面に表示されるわけではありません。これは、単一のイメージビューで表示されるため奇妙であり、イメージローダーはその仕事を完璧に実行します。ギャラリーの設定と関係があると思います。

ギャラリーのコード:

// define pager identifier
        pager = (LinearLayout)findViewById(R.id.pager);
        pagerdot1 =(ImageView)pager.findViewById(R.id.pager_dot_1);
        pagerdot2 =(ImageView)pager.findViewById(R.id.pager_dot_2);
        pagerdot3 =(ImageView)pager.findViewById(R.id.pager_dot_3);
        venueImage = (ImageView)findViewById(R.id.venueImage);
        venueGallery = (CustomGallery)findViewById(R.id.GVvenueImage);


        imageLoader=new LargerImageLoader(this.getApplicationContext());



        if(venue.photos.size()>1){//multiple photos --> gallery

            if(venue.photos.size()==2){
                pagerdot3.setVisibility(View.GONE);
            }

            venueGallery.setVisibility(View.VISIBLE);
            venueImage.setVisibility(View.GONE);

            String[] fotos = new String[venue.photos.size()]; 
            for(int i=0;i<venue.photos.size();i++){
                if(venue.photos.get(i).large !=null){
                    fotos[i] = venue.photos.get(i).large;
                    System.out.println(venue.photos.get(i).large);
                }
            }
            ImagePagerAdapter galleryad = new ImagePagerAdapter(fotos);

            venueGallery.setAdapter(galleryad);
            venueGallery.setOnItemSelectedListener(new OnItemSelectedListener(){
                @Override
                public void onItemSelected(AdapterView<?> adapter, View view, int position, long id) {
                    switch(position) {
                    case 0:
                        pagerdot1.setImageResource(R.drawable.pager_oranje);
                        pagerdot2.setImageResource(R.drawable.pager_wit);
                        pagerdot3.setImageResource(R.drawable.pager_wit);
                        break;
                    case 1:
                        pagerdot2.setImageResource(R.drawable.pager_oranje);
                        pagerdot1.setImageResource(R.drawable.pager_wit);
                        pagerdot3.setImageResource(R.drawable.pager_wit);
                        break;
                    case 2:
                        pagerdot3.setImageResource(R.drawable.pager_oranje);
                        pagerdot2.setImageResource(R.drawable.pager_wit);
                        pagerdot1.setImageResource(R.drawable.pager_wit);
                        break;
                    default:
                        pagerdot1.setImageResource(R.drawable.pager_oranje);
                        pagerdot2.setImageResource(R.drawable.pager_wit);
                        pagerdot3.setImageResource(R.drawable.pager_wit);
                    }


                }
                @Override
                public void onNothingSelected(AdapterView<?> adapter) {

                }


            });
        }else if(venue.photos.size() ==1 ){ //1 foto
            if(venue.photos.get(0).large != null){
                venueGallery.setVisibility(View.GONE);
                venueImage.setVisibility(View.VISIBLE);
                imageLoader.DisplayImage(venue.photos.get(0).large, venueImage);
            } else{
                setStandardPic();
            }
            pager.setVisibility(View.GONE);
            //                
        } else{
            setStandardPic();           
        }

そして:

private class ImagePagerAdapter extends BaseAdapter {

    private String[] images;
    private LayoutInflater inflater;

    ImagePagerAdapter(String[] images) {
        this.images = images;
        inflater = getLayoutInflater();
    }

    @Override
    public int getCount() {
        return images.length;
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = null;
        RelativeLayout borderImg;
        if (convertView == null) {
            imageView = new ImageView(getBaseContext());
            imageView.setLayoutParams(new LayoutParams(width,height)); // size
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            imageView.setPadding(0,0,0,0);
            imageView = (ImageView) inflater.inflate(R.layout.item_gallery_image, parent, false);
            borderImg = new RelativeLayout(getBaseContext());
            borderImg.setPadding(0,0,0,0);
            borderImg.setBackgroundColor(Color.TRANSPARENT); // no color
        }else {
                    imageView = (ImageView) convertView;
                    borderImg = (RelativeLayout) convertView;
                }

        imageLoader.DisplayImage(images[position], imageView);
        borderImg.addView(imageView);
        return borderImg;
    }
}   

トップ画面のxml:

<RelativeLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent" >

                    <ImageView
                        android:id="@+id/venueImage"
                         android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:adjustViewBounds="true"
                        android:fadingEdge="none"
                        android:scaleType="centerCrop"
                        android:src="@drawable/header_food" />

                    <com.hera.ontdekdelft.lazyloader.CustomGallery
                        android:id="@+id/GVvenueImage"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:adjustViewBounds="true"
                        android:fadingEdge="none"
                        android:scaleType="centerCrop"
                        android:visibility="gone" />

                    <ImageView
                        android:id="@+id/venueCategoryImage"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentBottom="true"
                        android:layout_alignParentRight="true"
                        android:src="@drawable/venuecategory_sights" />

                    <include
                        android:id="@+id/pager"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentBottom="true"
                        android:layout_alignParentLeft="true"
                        layout="@layout/gallery_pager" />
                </RelativeLayout>

私のカスタム ギャラリーは、より良い fling 設定のために onFling メソッドをオーバーライドした通常のギャラリーです。

ギャラリーがタブレット画面でも機能するようにするには、何を変更すればよいですか?

4

1 に答える 1

0

あなたの幅と高さがあなたのソースのどこから来ているのかはっきりしていません...私はタブレットを持っていませんが、これは私のGalaxy Noteとエミュレーターでうまく機能しています. 高さの計算は、画像の縦横比によって異なる場合があります。

screen_width と screen_height は、アダプターのコンストラクターに含まれます。

主な活動中

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    screen_width = size.x;
    screen_height = size.y;

アダプター getview

   @Override
    public View getView(int postion, View view, ViewGroup group)
        {
            ImageView imageView = new ImageView(_context);

            imageView.setImageResource(imageIds[postion]);
            imageView.setScaleType(ScaleType.FIT_XY);
            imageView.setLayoutParams(new Gallery.LayoutParams(_screen_width, (int) ((double)_screen_height/2.5)));
            return imageView;
        }
于 2013-04-08T00:35:47.317 に答える