Android: как программно установить ширину ImageView внутри TableRow - PullRequest
9 голосов
/ 27 января 2011

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

Макет: (Многоточие предназначено для уменьшения кода)

<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);

РЕДАКТИРОВАТЬ : я хочу, чтобы изображение было обрезано внутри установленных границ, и ячейка таблицы должнаоригинальная ширина.Ниже приведен пример кода, который сработал для меня благодаря предложению Парага:

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);

Ответы [ 2 ]

31 голосов
/ 27 января 2011

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

    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);
2 голосов
/ 27 января 2011

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

Для масштабирования попробуйте ImageView. setImageMatrix и Matrix. preScale .

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...