2012-09-24 2 views
0

사용 가능한 사진 수에 따라 이미지 뷰 또는 갤러리를 사용합니다. 사용할 수있는 사진이 하나 뿐인 경우 이미지 뷰를 사용하고 매력처럼 작동합니다. u niversalloader에서 imageloader를 사용합니다. 그림이 전체 화면 너비의 화면 상단에 있습니다.갤러리 이미지는 화면 너비를 채워야합니다.

사진이 여러 개인 경우 갤러리를 사용하며 페이지 표시기를 사용합니다. 작은 화면에서는 정상적으로 작동합니다. 그러나 태블릿에서는 그림이 전체 화면을 채우지 않습니다. 단일 이미지 뷰가 수행하기 때문에 이상합니다. imageloader는 작업을 완벽하게 처리합니다. 내 갤러리 설정과 관련이 있다고 생각합니다. 갤러리에 대한

코드 :

// 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> 

내 사용자 정의 갤러리가 onFling 방법 그냥 보통의 갤러리입니다 더 나은 집게 설정을 재정의하십시오.

태블릿 화면에서도 내 갤러리가 작동하도록 변경해야하는 항목은 무엇입니까?

답변

0

너의 너비와 높이가 어디에서 왔는지 확실하지 않다. 나는 타블렛이 없지만 이것은 내 은하 메모와 에뮬레이터에서 잘 작동한다. 높이 계산은 이미지의 종횡비에 따라 다를 수 있습니다.

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; 
     } 
관련 문제