2011-01-27 3 views
9

Как вы программно устанавливаете ширину ImageView внутри TableRow? Я НЕ хочу, чтобы ширина ячейки менялась, и только ширина изображения внутри ячейки.Android: как программно установить ширину ImageView внутри TableRow

Layout: (многоточие есть уменьшить код)

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal"> 
<TableRow android:gravity="center_vertical"> 
<Button>...</Button> 
<ImageView 
    android:id="@+id/fruit" 
    android:layout_width="120dp" 
    android:layout_height="44dp" 
    android:src="@drawable/apple" 
    android:scaleType="matrix" 
></ImageView> 
<Button>...</Button> 
</TableRow> 
<TableRow>...</TableRow> 
</TableLayout> 

Java:

ImageView iv = (ImageView) findViewById(R.id.fruit); 
LayoutParams frame = iv.getLayoutParams(); 
frame.width = 100; 
iv.setLayoutParams(frame); 

EDIT: я хочу, чтобы изображение обрезано внутри границ i, а ячейка таблицы - исходная. Ниже приведен пример кода, который работал на меня благодаря предложению парага:

Bitmap bmp = BitmapFactory.decodeResource(getResources() , R.drawable.apple); 
int width = 50; 
int height = 44; 
Bitmap resizedbitmap = Bitmap.createBitmap(bmp, iv.getScrollX(), iv.getScrollY(), width, height); 
iv.setImageBitmap(resizedbitmap); 

ответ

31

Другой способ, что и изменения размера растрового изображения

ImageView img=(ImageView)findViewById(R.id.ImageView01); 
    Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.sc01); 
    int width=200; 
    int height=200; 
    Bitmap resizedbitmap=Bitmap.createScaledBitmap(bmp, width, height, true); 
    img.setImageBitmap(resizedbitmap); 
+0

именно то, что мне нужно – keybee

2

Хотите расширить изображение? Или обрезать его?

Чтобы масштабировать, попробуйте ImageView. setImageMatrix и матрица. preScale.

Если вы не хотите определять Матрицы, вы можете попробовать Rects (ограничивающие поля). Получите исходный прямоугольник с помощью ImageView. getDrawingRect, а затем определите все, что вы хотите, и используйте Matrix. setRectToRect для создания вашей матрицы изображений.

В противном случае вы пробовали ImageView. setMaxWidth?

+0

setMaxWidth не работал. Я попробовал ваше предложение, но Matrix.setRectToRect требует Bitmap.Config, который масштабирует изображение. – caseadilla

Смежные вопросы