2015-08-20 62 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,因爲我需要複製點擊視圖的drawable,而不是來自資源的靜態視圖。

編輯:當我在Galaxy Note 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

相關問題