android - switch - imagebutton用法




在容器視圖縮放centerInside時,在android imageview中查找位圖的位置 (3)

你需要使用Drawable的邊界來自己做數學。

ImageView test = (ImageView) findViewById(R.id.base_page);
Rect bounds = test.getDrawable().getBounds();
int x = (test.getWidth() - bounds.right) / 2;
int y = (test.getHeight() - bounds.bottom) / 2;

首先我們計算視圖中未被圖像使用的空間。 然後,由於它是居中的額外的空間是均勻分佈在圖像的前後,所以它被畫到View一半長度。

這些數字是相對於視圖的位置,但是如果你需要你可以添加視圖X和Y.

我有一個RelativeLayout包含一個自定義的ImageView,scaleType =“centerInside”,我加載在一個位圖(通常比imageView小)。 如何獲得位圖繪製位置的頂部/左側位置? 我需要能夠在相對於位圖的位置上添加視圖。

   RelativeLayout view = (RelativeLayout) inflater.inflate(R.layout.scroll_scaled, container, false);
ContentImageView image = (ContentImageView) view.findViewById(R.id.base_page);
Bitmap bm = mInterfaceActivity.getPageImage(mPageNumber);
image.setImageBitmap(bm);`

佈局文件scrolled_scaled

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
    android:scaleType="centerInside"
    android:id="@+id/base_page"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff00ff00"
    android:contentDescription="@string/product_page"
    android:src="@android:drawable/ic_menu_report_image" >
</ImageView>
</RelativeLayout>

基於反饋和一些重試,最後完成了兩部分的解決方案。

我創建的子視圖添加到“近似”位置的RelativeLayout,但作為View.INVISIBLE。

我對RelativeLayout ViewGroup進行了超級分類,在onLayout中,我遍歷了子視圖的列表,並將它們放在“適當”的位置,因為我現在已經知道了RelativeLayout的擴展大小。

似乎笨重,但它的作品。

感謝所有的建議,我的解決方案是採取每個人的建議。


這個方法返回imageView中圖像的邊界。

/**
 * Helper method to get the bounds of image inside the imageView.
 *
 * @param imageView the imageView.
 * @return bounding rectangle of the image.
 */
private static RectF getImageBounds(ImageView imageView) {
    RectF bounds = new RectF();
    Drawable drawable = imageView.getDrawable();
    if (drawable != null) {
        imageView.getImageMatrix().mapRect(bounds, new RectF(drawable.getBounds()));
    }
    return bounds;
}




relativelayout