2015-08-20 2 views
0

Мне нужно скопировать ImageView в мое приложение и изменить его размер всякий раз, когда пользователь хочет. Что я могу здесь:ImageView ScaleType.FIT_XY не работает с setImageDrawable

public void testClick(View view) 
{ 
    ImageView im = new ImageView(this); 
    im.setImageDrawable(((ImageView) view).getDrawable()); 
    Point size = getSize();//size of the window 
    al.addView(im, new AbsoluteLayout.LayoutParams(view.getWidth(), view.getHeight(), size.x/2, size.y/2)); 
    im.setScaleType(ImageView.ScaleType.FIT_XY); 
    im.setOnTouchListener(touchListener); 
} 
public void changeSize() 
{ 
    ... 
    view.setLayoutParams(new AbsoluteLayout.LayoutParams(width + deltaX, height + deltaY, params.x, params.y)); 
} 

Это не работает! означает, что когда я увеличиваю размер представления, изображение внутри не растягивается. Но странная вещь случается, когда я меняю линию im.setImageDrawable(((ImageView) view).getDrawable()); с im.setImageResource(R.drawable.my_image); Это работает! любая идея?

Я не хочу использовать setImageResource, потому что мне нужно скопировать выталкиваемый вид с кликом, а не статический из ресурсов.

Редактировать: Когда я использую его в Галактике Примечание 6. (я думаю, что это Android 5), он работает. но на моем устройстве Android 4.1.2 это не так!


Edit2: Я использовал

BitmapDrawable bd=(BitmapDrawable)((ImageView) view).getDrawable(); 
im.setImageBitmap(bd.getBitmap()); 

и workd!

+0

попробуйте вызвать view.invalidate() после изменения размера. – DavidH

+0

@DavidH это не сработало – Feri

+0

еще одна вещь, которую вы могли бы попробовать, будет использовать setImageBitmap() вместо setImageDrawable(), поскольку я считаю, что setImageResource() устарел. – DavidH

ответ

0

Чтобы устранить проблему, используйте ниже код, чтобы изменить ваш ImageView размер

mImageView.getLayoutParams().width = myWidth; 
mImageView.getLayoutParams().height = myHeight; 

А затем вызвать

mImageView.requestLayout(); 

, чтобы изменения вступили в силу размера.

Я считаю, что это должно решить вашу проблему.

+0

это не было! на самом деле, событие без повторной калибровки, мой код не работает. Но это предполагается. потому что я использую большой размер, чтобы добавить его в AbsoluteLayout. – Feri

+0

@Feri на этом этапе, это поможет узнать, используете ли вы пользовательский класс Drawable или что-то, что вы не включили в сообщение, но могут быть связаны. – DavidH

+0

нет! Все связанные вещи включены! Вы знаете, что он копирует текущее значение в исходном ImageView (если оно масштабируется, оно копирует точно масштабированное изображение). Но после этого изменений нет. – Feri

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