在stackoverflow上找到两种解决方案,XML定义里的

时间:2019-09-30 15:37来源:美高梅手机游戏网站
今天在写一个页面的时候,因为要加载的图片是一张长图片,所以外层用scrollview包裹,但是在真机上运行后,imageview的头部和底部都有一条空白,在stackoverflow上找到两种解决方案。 adju

今天在写一个页面的时候,因为要加载的图片是一张长图片,所以外层用scrollview包裹,但是在真机上运行后,imageview的头部和底部都有一条空白,在stackoverflow上找到两种解决方案。

adjustViewBounds

调整ImageView的界限来保持图像纵横比不变。

XML定义里的android:adjustViewBounds="true"会将这个ImageView的scaleType设为fitCenter。不过这个fitCenter会被后面定义的scaleType属性覆盖(如果定义了的话),除非在Java代码里再次显示调用setAdjustViewBounds(true)。

设置该属性无效的情况:

  • 如果设置的layout_width与layout_height都是定值,那么设置adjustViewBounds是没有效果的,ImageView将始终是设定的定值的宽高。
  • 如果设置的layout_width与layout_height都是wrap_content,那么设置adjustViewBounds是没有意义的,因为ImageView将始终与图片拥有相同的宽高比(但是并不是相同的宽高值,通常都会放大一些)。

实现属性效果,如果两者中一个是定值,一个是wrap_content,比如layout_width="100px",layout_height="wrap_content"时,ImageView的宽将始终是100px,而高则分两种情况:

  • 当图片的宽小于100px时,layout_height将与图片的高相同,即图片不会缩放,完整显示在ImageView中,ImageView高度与图片实际高度相同。图片没有占满ImageView,ImageView中有空白。
  • 当图片的宽大于等于100px时,此时ImageView将与图片拥有相同的宽高比,因此ImageView的layout_height值为:100除以图片的宽高比。比如图片是500X500的,那么layout_height是100。图片将保持宽高比缩放,完整显示在ImageView中,并且完全占满ImageView。

参考自博文ImageView的android:adjustViewBounds属性

(一)当ImageView的layout_width和layout _height都是固定值的时候。adjustViewBounds="ture"是没有效果的,因为图片会按照ImageView的比例被直接填充到ImageView控件中。

1.在imageview中将adjustViewBounds属性设置为true

在google开发文档中是这样描述的美高梅手机游戏网站 1imageview

意思就是,如果你希望imageview保持drawable一样的宽高比,就将adjustViewBounds设值为true。这个方法亲测有效。

Android小Demo遇到的问题

在开发中遇到的问题:

  • ImageView属性,adjustViewBounds,scaleType
  • Window.setFlags
  • 状态栏着色
  • 通过File对象获取path
  • Activity.overaridePaddingTransition()

(二)当ImageView的layout_ width和layout_ height其中有一个属性固定值的时候。图片的宽/高将会与ImageView的layout_ width/layout_ height的固定值进行比较。如果图片宽/高小,图片将会以其高/宽来填充ImageView,此时的ImageView的ImageView的layout_ height/layout_ width将与图片的高/宽相同。如果图片宽/高大于或者等于,ImageView将与图片拥有相同的宽高比,也就是说图片将会以自身的宽高比填充到ImageView。

2.在scrollview的跟布局设置fillViewport属性为true

同样,看看文档中是怎么描述的美高梅手机游戏网站 2scrollview

大概就是,是否扩展scrollview的内容以填充视图。这个方法反复试了好几次都没有什么用。所以最后采取了第一种方案。

XML定义里的android:adjustViewBounds="true"会将这个ImageView的scaleType设为fitCenter。不过这个fitCenter会被后面定义的scaleType属性覆盖,除非在Java代码里再次显示调用setAdjustViewBounds。如果设置的layout_width与layout_height都是定值,那么设置adjustViewBounds是没有效果的,ImageView将始终是设定的定值的宽高。如果设置的layout_width与layout_height都是wrap_content,那么设置adjustViewBounds是没有意义的,因为ImageView将始终与图片拥有相同的宽高比(但是并不是相同的宽高值,通常都会放大一些)。如果两者中一个是定值,一个是wrap_手机美高梅游戏网址 ,content,比如layout_width="100px",layout_height="wrap_content"时,ImageView的宽将始终是100px,而高则分两种情况:当图片的宽小于100px时,layout_height将与图片的高相同,即图片不会缩放,完整显示在ImageView中,ImageView高度与图片实际高度相同。图片没有占满ImageView,ImageView中有空白。当图片的宽大于等于100px时,此时ImageView将与图片拥有相同的宽高比,因此ImageView的layout_height值为:100除以图片的宽高比。比如图片是500X500的,那么layout_height是100。图片将保持宽高比缩放,完整显示在ImageView中,并且完全占满ImageView。希望对你有所帮助!

美高梅手机游戏网站 ,ImageView属性

(1) 那么adjustViewBounds="ture"是什么意思呢?

setFlags()可以实现多种效果

getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

可以实现窗体背景模糊

参考自博文UI效果(1):实现Activity全屏

在布局文件XML中设置adjustViewBounds="ture"的时候,会将这个ImageView的scaleType属性设置为fitCenter,但是如果同时在XML文件中设置android:scaleType,则android:scaleType的优先级会更高,adjustViewBounds="ture"中对scaleType属性设置将会失效。这种情况,只有在Java代码中设置setAdjustViewBounds(true)的时候,才会生效。

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="android.example.com.imageviewusage.MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Scale Type Specify Matrix"
        android:textSize="16sp"/>

    <ImageView
        android:id="@+id/id_img_matrix"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scaleType="matrix"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Scale Type Default Center"
        android:textSize="16sp"/>

    <ImageView
        android:id="@+id/id_img_center"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scaleType="matrix"/>
</LinearLayout>

(2) 那么接下来我们分析一下,如果设置adjustViewBounds="ture",图片宽高比到底将会什么变化?

编辑:美高梅手机游戏网站 本文来源:在stackoverflow上找到两种解决方案,XML定义里的

关键词:

  • 上一篇:没有了
  • 下一篇:没有了