得到GridView项目的正方形

时间:2014-02-05 09:43:08

标签: android android-layout gridview android-listview

我正在使用网格视图来显示我的数据[即一个图像和它的倾斜]

我的图像使用我的图像加载器库动态加载。问题是我的一些图像是横向或纵向的。由于这个原因,我的网格元素不保持精确的平方比。有些是垂直拉伸或压缩其他方式。

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

1 个答案:

答案 0 :(得分:1)

我建议你创建扩展ImageView(或GridView)的类,并测量root或任何其他父视图的边界。然后在你的项目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);
    }
}