Android图像比例类型适合宽度和scaleY = scaleX

时间:2013-11-08 09:58:34

标签: android android-layout imageview

我有一个带背景图片的布局。图像宽度应与屏幕宽度(match_parent)相同。但它很丑陋,操作系统不会将图片拉伸到高处。 我听说过ImageView scaleType,所以我在ImageView中有背景图片而不是布局背景,但是我无法配置成我想要的。

如何设置布局或ImageView缩放图像(宽度)以适应屏幕宽度并使用相同比例缩放高度?

我想要图片中的第二个屏幕: enter image description here

更新:

我正在尝试使用代码,但是我获得了0宽度+我无法相信这不能通过带有ImageView的xml来完成。

    Drawable imageDrawable = getResources().getDrawable(imageResource);
    contentContainer.setBackgroundDrawable(imageDrawable);

    Rect rect = imageDrawable.getBounds();
    int originalWidth = rect.width();
    int originalHeight = rect.height();

    Display display = getActivity().getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth();

    int height = originalHeight * (width/originalWidth);

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);
    contentContainer.setLayoutParams(layoutParams);


    contentContainer.post(new Runnable() {

        @Override
        public void run() {
            contentContainer.setScaleY(contentContainer.getScaleX());

            Rect rect = contentContainer.getBackground().getBounds();
            int originalWidth = rect.width();
            int originalHeight = rect.height();

            Display display = getActivity().getWindowManager().getDefaultDisplay(); 
            int width = display.getWidth();

            int height = originalHeight * (width/originalWidth);

            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);
            contentContainer.setLayoutParams(layoutParams);

        }
    }

5 个答案:

答案 0 :(得分:0)

将FrameLayout用作父级,然后将imageview添加为子级。

答案 1 :(得分:0)

将宽度 match_parent 和高度 fill_parent 添加到imageView,另一种方法是应用 android:layout_weight 属性尝试这可能是它的工作

答案 2 :(得分:0)

您可以在运行时通过测量设备的宽度来执行此操作: -

    super.onCreate(savedInstanceState);
    setContentView(<layout-resoure-id);
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
    int imageSize = 0;
    if (width > height)
        imageSize = height;
    else
        imageSize = width;

    ImageView imageView = (ImageView) findViewById(R.id.imageView);
    imageView.getLayoutParams().width = imageSize;
    imageView.getLayoutParams().height = imageSize;
    imageView.setImageResource(R.drawable.pattu);

你的xml: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
       android:layout_height="fill_parent"
    android:layout_margin="10dp"
    android:orientation="vertical" >

   <ImageView
    android:id="@+id/imageView"
    android:layout_width="100dp"
    android:layout_height="100dp" 
    android:scaleType="fitXY"/>

  </LinearLayout>

享受...!

答案 3 :(得分:0)

您是否尝试在布局文件中使用scaleType?

<ImageView
    ...
    android:scaleType="fitStart"
    />

这应该缩放图像以适合布局的顶部,必要时拉伸或缩小。 Haven没有机会测试(我无法记住高度/宽度设置 - 抱歉!),但这可能是一个解决方案。

答案 4 :(得分:0)

protocol AlarmClockType {
    var alarmLabel: String { get set }
    var sound: AlarmSound { get set }
    var snooze: Bool { get set }
    var alarmType: AlarmType { get set }
    var alarmOn: Bool { get set }
    var alarm: NSTimer? { get set }
    var attributedTitle: NSMutableAttributedString { get }

    static var DocumentsDirectory: NSURL { get }
    static var ArchiveURL: NSURL { get }

    func timeToAlarm(prayerTimes: [String: String]?) -> NSDate
    }
}

你的配置就在这里!

    ImageView imageView = (ImageView) findViewById(R.id.your_image_id);

    DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
    int width = displayMetrics.widthPixels;
    int height = displayMetrics.heightPixels;
    int imageSize = height>width?width:height;

你应该将imageView scaletype设为fitXY,并按照你想要的方式拉伸图像!

    imageView.getLayoutParams().width = imageSize;
    imageView.getLayoutParams().height = imageSize + (/* additional height logic*/);