2014-02-05 70 views
1

我正在使用網格視圖來顯示我的數據[即一個圖像和它的搖擺]get GridView項目精確的正方形

而我的圖像是動態加載與我的圖像加載器庫。問題是我的一些圖像是橫向或縱向。由於這個我的網格元素不保持精確的平方比。有些則是垂直拉伸或壓縮。

<GridView 
    android:id="@+id/fcpl_grid_listview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:numColumns="2" 
    android:scrollingCache="false"/> 

這裏是我的getView方法:

public View getView(final int position, View convertView, final ViewGroup parent) { 
      final ViewHolder viewholder; 
      Log.e("Calling...","getView"); 
      if (convertView == null) { 
       convertView = inflater.inflate(R.layout.inflater_product_list, parent, false); 
       viewholder = new ViewHolder(); 
       viewholder.productImage = (ImageView) convertView.findViewById(R.id.ipl_imageview); 
       viewholder.backGroundLayout = (RelativeLayout) convertView.findViewById(R.id.ipl_bk_layout); 
       viewholder.productName = (TextView) convertView.findViewById(R.id.ipl_productname); 
       convertView.setTag(viewholder); 
      } else { 
       viewholder = (ViewHolder) convertView.getTag(); 
      } 
      viewholder.productName.setText("SOME TEXT"); 
      String imageUrl = "SOME URL"; 
      imageLoader.get(imageUrl, VALUES_FOR_MY_IMAGE_LOADER_LIBRARY)); 
      return convertView; 
     } 

我試着在網上不同的建議的方法,但沒有工作,因爲我有動態圖像加載當getView叫做ImageView的的LayoutParams不知道。

+0

爲什麼不修正'ImageView'的高度和寬度? – GrIsHu

+0

不,我不能;我必須保持GridView寬度作爲填充父項;網格視圖中有2列。所以我不知道確切的高度[即高度=寬度] – AabidMulani

+0

你必須剛剛固定圖像的高度。 –

回答

1

我建議你做類延伸ImageView(或GridView)並測量根或任何其他父視圖的範圍。然後在你的項目xml中使用它。

public class SquareImageView extends ImageView { 
    public SquareImageView(Context context) { 
     super(context); 
    } 

    public SquareImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public SquareImageView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int width = MeasureSpec.getSize(widthMeasureSpec); 
     int height = MeasureSpec.getSize(heightMeasureSpec); 
     View rootView = this.getRootView(); 
     if (rootView != null) { 
      width = rootView.getWidth(); 
      height = rootView.getHeight(); 
     } 
     int size = width > height ? height : width; 
     super.onMeasure(size, size); 
     setMeasuredDimension(size, size); 
    } 
}