1

我试图设置我的ImageView调整大小,但它不能通过位图或其他方法工作我将放置我的代码所以如果有人可以帮助我如何调整大小ImageView以适应表格行thnx。

public class Test extends Activity
{
    private TableLayout Table1;
    protected void onCreate(Bundle savedInstanceState) 
    { 
        int[] ImageArray={R.raw.hospital_image,R.raw.hotel_image};
        super.onCreate(savedInstanceState);
        setContentView(R.layout.favorites);
        Table1 = (TableLayout) findViewById(R.id.Table);
        TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams(
                TableRow.LayoutParams.WRAP_CONTENT,
                TableRow.LayoutParams.WRAP_CONTENT, 1.0f);
        for(int i=0;i<ImageArray.length;i++)
        {
            TableRow TR = new TableRow(this);
            TR.setLayoutParams(tableRowParams);
            ImageView img=new ImageView(this);
            //What should i do here to resize it ???
            Drawable d = getResources().getDrawable(ImageArray[i]);
            img.setImageDrawable(d); 

            TR.addView(img, new TableRow.LayoutParams(
                    TableRow.LayoutParams.WRAP_CONTENT,
                    TableRow.LayoutParams.WRAP_CONTENT, 1.0f));

            Table1.addView(TR);
        }
    }

我的 XML 只包含这些:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" >

        <TableLayout
            android:id="@+id/Table1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </TableLayout>
    </ScrollView>

</RelativeLayout>
4

2 回答 2

6

尝试这个,

public class ResizableImageView extends ImageView {
    public ResizableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ResizableImageView(Context context) {
        super(context);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        Drawable d = getDrawable();
        if (d == null) {
            super.setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
            return;
        }

        int imageHeight = d.getIntrinsicHeight();
        int imageWidth = d.getIntrinsicWidth();

        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);

        float imageRatio = 0.0F;
        if (imageHeight > 0) {
            imageRatio = imageWidth / imageHeight;
        }
        float sizeRatio = 0.0F;
        if (heightSize > 0) {
            sizeRatio = widthSize / heightSize;
        }

        int width;
        int height;
        if (imageRatio >= sizeRatio) {
            // set width to maximum allowed
            width = widthSize;
            // scale height
            height = width * imageHeight / imageWidth;
        } else {
            // set height to maximum allowed
            height = heightSize;
            // scale width
            width = height * imageWidth / imageHeight;
        }

        setMeasuredDimension(width, height);
    }
}

在你的布局中使用它,就像你以前ImageView一样,只需更改标签,就像这样,

        <com.example.ResizableImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:padding="1px"
            android:scaleType="fitCenter"
            android:src="..." />
于 2012-10-19T21:21:31.280 回答
2

setLayoutParams()应该做的伎俩,在你的情况下,我相信你需要TableRow.LayoutParams,像这样:

ImageView img = new ImageView(this);
img.setLayoutParams(new TableRow.LayoutParams(w, h));

编辑

尝试在Drawable之前设置setLayoutParams

ImageView img = new ImageView(this);
Drawable d = getResources().getDrawable(ImageArray[i]);
img.setImageDrawable(d);
img.setLayoutParams(new TableRow.LayoutParams(w, h));
于 2012-10-19T21:10:24.937 回答