2012-01-24 16 views
5

ImageViewをラップする矩形の代わりに、ImageViewのDrawableをラップする矩形オブジェクトを取得したいとします。この矩形を使ってDrawableの周りに派手な矩形を描画します。どのようにしてその長方形を得ることができますか?今、あなたはあなたの四角形を持ってAndroidでImageViewのDrawableの矩形を取得する方法は?

Bitmap bmp = ((BitmapDrawable)dr).getBitmap(); 
int w = bmp.getWidth(); 
int h = bmp.getHeight(); 

答えて

-2

は、単純にビットマップオブジェクトに描画可能に変換します。

+3

これはDrawableの幅と高さのみを示しますが、Drawableを囲む矩形が必要です。 – ipman

+0

あなたは何を意味するかをもっとよく説明できますか?あなたはImageViewからのレイアウトを意味しますか? – Andreas

+0

いいえ、ImageViewには、ImageViewの境界とDrawableの間にある程度のスペースがあることがあります。私はこの間隔を私の矩形に含めたくありません。 – ipman

4
Rect rect = new Rect(); 
    ImageView iV = new ImageView(); 

    rect.left = iV.getLeft(); 
    rect.top = iV.getTop(); 
    rect.bottom = iV.getBottom(); 
    rect.right = iV.getRight(); 

+7

これはImageViewを取り囲む矩形を与えますが、ImageViewのDrawableを取り囲む矩形が必要です – ipman

0

私はこれを試していない、あなたの質問を読むときにちょうど私の心に来た。これはどうですか。

ImageViewにパディングがなく、重力が中央に設定されているとします。問題は、Drawableの幅と高さを単純に使用して、ImageViewに合わせてサイズが変更される可能性があるため、矩形の位置を計算できないことです。したがって、ImageViewの寸法とImageViewとDrawableの比率を使用する必要があります。

DrawableとImageViewの比率が等しい場合、DrawableがImageViewを完全に満たし、次に矩形がImageViewのサイズと一致します。 (0/0)、(幅ImageView/0)、(幅ImageView、高さImageView)、(0 /高さImageView)、

矩形の座標は、左上隅からカウンターワイズです。比率が一致せず、たとえばDrawableがImageViewよりも広いとすると、DrawableはImageViewの全幅を塗りつぶしますが、高さは埋められません。 Drawableが中心に来るにつれてDrawablesの左上隅のy座標を計算することができます。最初に、ImageViewのDrawableの現在の高さを計算します。これは、DrawableがImageViewに合わせてサイズ変更された元の寸法を持たないため、完了する必要があります。左上隅の座標の

current height Drawable = (Drawable height/Drawable width) * ImageView width 

y値:

y = (ImageView height - Drawable current height)/2 

したがって矩形の座標は(左上隅から賢明カウンタ)である:(0/Y)、( (0/y +現在の高さDrawable)

私はあなたがアイデアを得ることを望みます。 DrawableがImageViewよりも高い場合は、同じ方法で計算できますが、幅と高さの値を交換する必要があります。

0

イメージビューがドロウアブルに適用する縮尺タイプによって、ImageViewクラス(http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.2_r1/android/widget/ImageView.java#ImageView.configureBounds%28%29)のメソッド "configureBounds()"に対して 逆エンジニアリングを行う必要があります。

(mDrawMatrix.setTranslate((int) ((vwidth - dwidth) * 0.5f + 0.5f), 
         (int) ((vheight - dheight) * 0.5f + 0.5f));) 

:私は中央のスケールタイプのための画像の位置を必要とするとき

例えば

私はの逆を行います(私は画像ビューは画像を拡大縮小していないため、他よりも簡単だと思います)

ImageView iv (Your ImageView); 
    Drawable dw = iv.getDrawable(); 

    int dwidth = dw.getIntrinsicWidth(); 
    int dheight = dw.getIntrinsicHeight(); 

    int vwidth = iv.getWidth() - iv.getPaddingLeft() - iv.getPaddingRight(); 
    int vheight = iv.getHeight() - iv.getPaddingTop() - iv.getPaddingBottom(); 

    int realImageWidth = (int)((vwidth - dwidth) * 0.25f); 
    // (I do not know why I had to put 0.25f instead of 0.5f, 
    // but I think this issue is a consequence of the screen density) 

    int realImageHeight = (int)((vheight - dheight) * 0.25f); 

このデータを使用すると、矩形を作成できるはずです。これはちょっと難しいですが、それは私にとっては効果的です。

+0

0.25fの部分を理解しましたか?ここですべてがピクセルであれば密度と関係があると思われるのはなぜですか? –

関連する問題