美文网首页
ZhuHuDaily问题

ZhuHuDaily问题

作者: 狮_子歌歌 | 来源:发表于2016-10-10 20:56 被阅读51次

Android小Demo遇到的问题

在开发中遇到的问题:

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

ImageView属性

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属性

scaleType

该属性值由一下几种可以选择:

  • matrix,绘制时,使用图像矩阵方式缩放。图像矩阵可以通过 setImageMatrix(Matrix) 设置。
  • fitXY,横向、纵向独立缩放,以适应该ImageView。
  • fitCenter,保持纵横比缩放图片,缩放完成后将图片放在ImageView的中央。
  • fitStart,保持纵横比缩放图片,并且将图片放在ImageView的左上角。
  • fitEnd,保持纵横比缩放图片,缩放完成后将图片放在ImageView的右下角。
  • center,把图片放在ImageView的中央,但是不进行任何缩放。
  • centerInside,保持纵横比缩放图片,以使得ImageView能完全显示该图片。
  • centerCrop,保持纵横比缩放图片,以使图片能完全覆盖ImageView。

这里有一个属性值比较有疑问,于是写了一个例子来实践下:

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>

Java

private void initView() {
        mImgMatrix = (ImageView) findViewById(R.id.id_img_matrix);
        mImgCenter = (ImageView) findViewById(R.id.id_img_center);

        Matrix matrix = new Matrix();
        matrix.setTranslate(30, 20);

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(getResources(), R.drawable.start, options);

        Bitmap bitmap = ScaleBitmap.scaleBitmap(options, this);
        
        mImgCenter.setImageBitmap(bitmap);
        mImgMatrix.setImageMatrix(matrix);
        mImgMatrix.setImageBitmap(bitmap);
    }

分析:在这里我对其中一个ImageView设定了指定的平移矩阵,并且效果确实和按照默认的图像矩阵绘制图片有区别。

效果

ScaleType Matrix.png

Window.setFlags

由于调用该方法的Activity是一个SplashActivity,所以我们需要实现Activity的全屏:没有ActionBar,没有标题栏,以及隐藏状态栏。

protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_splash);
        initView();
    }

有一点需要注意,官方文档指出:Note that some flags must be set before the window decoration is created (by the first call to setContentView(View, android.view.ViewGroup.LayoutParams) or getDecorView(): FLAG_LAYOUT_IN_SCREEN and FLAG_LAYOUT_INSET_DECOR. These will be set for you based on the windowIsFloating attribute. 意思大概是要在setContentView()之前调用setFlags()。

setFlags()与addFlags()区别

addFlags()源码:

public void addFlags(int flags) {  
        setFlags(flags, flags);  
}  

其实两者可以这样等价:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,   
            WindowManager.LayoutParams.FLAG_FULLSCREEN);  

等价于:

this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

setFlags()可以实现多种效果

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

可以实现窗体背景模糊

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

个人理解

通过设置Window.setFlags()来实现Activity的全屏就是为了隐藏状态栏,实现状态栏沉浸的效果。

通过File获取路径

有两种方法可以获取File的路径:getAbsolutePath(),getPath.

getAbsolutePath()

返回File对象表示的完整的绝对文件名或目录名。这里不管创建FIle对象时用的是相对文件名还是绝对文件名,它都会返回整个完整的路径。

getPath()

返回File对象表示的完整的路径名和文件名。这里返回的就是创建FIle对象时,传递给构造函数的path/file_name字符串。

Activity.overaridePaddingTransition()

相关文章

  • ZhuHuDaily问题

    Android小Demo遇到的问题 在开发中遇到的问题: ImageView属性,adjustViewBounds...

  • 问题,不是问题;问题,还是问题

    问题,不是问题 今天,是到新校舍的第一天。没水没电没床铺,教室里连黑板都没有。面对诸多问题,幸运的是...

  • 问题问题还是问题?

    问题实在是太多了!菜要这样做,不这样做是问题;饭没煮好,也是问题;自己不知道学会搞吃的也是问题;生活好像只剩下无尽...

  • 问题不是问题,如何对待问题才是问题。

    这几天身体状态一直不太好,反复头疼,但仍然坚持上课,我知道我要什么。我渴望找到那个自由绽放的自己。 早上怀着期待的...

  • “问题”不是问题,认为“是问题”才是问题

    大概从一个多星期前,腹部就开始有间断的疼痛感了,有时甚至会很难受。这种感觉在今天上午坐车时达到了最强烈,我简直不知...

  • 问题不是问题,怎样看问题才是问题。

    焦点幸福教师 坚持分享第1349天2020.11.17周二 小风波 1.购物 最近布置班级文化,我从网上购...

  • 问题的问题

    “你别总给我说问题、问题,给我提一些建设性的建议行不?” “你咋变成了意见篓子?” 满腔热血地跑到领导面前表功,结...

  • 问题的问题

    “你别总给我说问题、问题,给我提些建设性的建议行不?” “你咋变成了意见篓子?” 满腔热血地跑到领导面前表功,结果...

  • 问题不是问题!?

    创45:3-5 约瑟对他弟兄们说:“我是约瑟,我的父亲还在吗?”他弟兄不能回答,因为在他面前都惊惶。约瑟又对他弟兄...

  • 问题的问题

    问题家庭的问题是:家长本身用着有问题的方法教育孩子,没问题的孩子也变得有问题。 而且更严重的问题是:家长并没有意识...

网友评论

      本文标题:ZhuHuDaily问题

      本文链接:https://www.haomeiwen.com/subject/gsevyttx.html