Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题

2023-11-01

使用ImageView会遇到的问题

 

Android应用中,都少不了图片的显示,ImageView,轮播图,ViewPager等等,很多都是来显示图片的,比如一个广告条的轮播效果,参看博客:广告条效果实现----ViewPager加载大图片(LruCache)以及定时刷新,很多时候,我们都希望图片能够在宽度上填充父窗体,这样比较符合人的审美观点,但是问题就随之而来了,那就是高度如何定义??先来看一个普通的ImageView的 Xml布局文件的定义:

 

?
1
2
3
4
5
6
7
<linearlayout android:layout_height= "match_parent" android:layout_width= "match_parent" android:orientation= "vertical" xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" >
 
     <imageview android:layout_height= "wrap_content" android:layout_width= "fill_parent" android:src= "@drawable/recommend_39" >
 
     <textview android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:text= "描述文字信息........................." >
 
</textview></imageview></linearlayout>

为了方便查看,我在ImageView下面又加上了一句描述的信息的TextView,这时,父控件都是填充父窗体,而ImageView则是:横向填充父窗体,纵向包裹内容;text都是包裹内容;那么来看看显示效果:

 

\

 

上面那个蓝色的小框就是ImageView的范围,这种效果一般都不会是我们想要的,那么如果想要ImageView中的图片能够填满ImageView的整个窗体怎么办?添加一个属性:scaleType,如下:

 

?
1
<imageview android:layout_height= "wrap_content" android:layout_width= "fill_parent" android:scaletype= "fitXY" android:src= "@drawable/recommend_39" ></imageview>

效果如图:

 

\

android开发app
拉伸缠绕膜厂家
拉伸夹具

可以看到,填是填满了,但是也由于纵向拉伸而使图片变形了。那要怎么做呢?

 

我们仔细观察一下,不难发现ImageView的纵向高度是包裹内容:wrapcontent,有些同学可能想到,能够直接在这里给ImageView一个特定的dip值,让这个ImageView符合图片的宽高比呢?这样做无疑是可以的,但是却不具有通用性。。。下面还是用上面的例子来讲解:

 

我们先来实现一下,制定ImageView的高度,来达到让这张图片在这个特定模拟器下显示比例正常的过程:

 

上面的图片实际像素的尺寸是:828*314,宽度和高度的比例大约是2.43,而我们这里使用的模拟器的尺寸是480*800(单位是px,也就是像素),也就是说宽度上的像素是480,那么我们要设置这个ImageView的高度为多少dip才能够让其正好符合2.43的比例呢。

 

Android设备上px(像素)、dpi(像素密度)、dip(密度无关像素)之间的关系:

 

这里又要牵扯出另外一块知识点,dip和dpi的联系:

 

分辨率(Resolution):表示设备屏幕上像素点的总数,比如上面的模拟器,屏幕像素尺寸是480(px)*800(px)

 

dpi(像素密度):是指每英寸的像素,所以同分辨率的两个设备,它们的dpi很可能不一样;如果一个手机分辨率5寸是1080*1920,而一个平板9.7寸分辨率也是1080*1920,那么 手机的dpi会比平板高出很多。

 

dp/dip:全称是Density-independent pixel ,中文名是 “密度无关像素”,也就是我们经常在xml文件中写的长度单位dp。为什么叫做密度无关像素呢,这其实是为了解决不同分辨率设备显示效果统一的一个解决方案,试想,如果一个两个手机屏幕都是一样大小,比如5寸,A手机的分辨率是 720*1280,而B手机的分辨率是1080*1920;那么如果我们想在上面显示一个图片分辨率为:200*200的图片,就会发现,在A手机上显示的图片,比B手机上显示的图片要小了很多;直观的来看,A手机的宽度是720,显示200*200的图片差不多要占据将近1/3的宽度,而反观B手机,宽度是1080,显示200*200的图片,则只需要占据1/5不到的宽度,而两个手机的尺寸又都是5寸,所以就会在显示同样分辨率的图片时,产生大小的差异。这种差异明显不是我们想要的。

 

所以dip/dp,密度无关像素就应运而生;它是这样规定的,dip与一个dpi(像素密度)为160dpi的设备的px(像素)值是相等的,而对于其他像素密度的设备,则依据转换公式来计算对应的dip值,这个公式是根据dpi(相当于比例),来转换px(像素)和dip(密度无关像素)的:

 

 

?
1
2
3
px = dip * (dpi / 160 )
 
dip = px / (dpi / 160 )

经过上面的转换之后,由于dip和px的转换是按照比例来的,而这个比例又是dpi/160,而dpi又是根据各个设备的分辨率和尺寸的比例得来的,所以使用相同的dip来设置的尺寸的控件,在相同尺寸大小的设备上,不论设备的分辨率是多少,它们显示的大小都会是一样的。

 

 

计算ImageView的合适高度的方法

 

有了上面的知识之后,我们就可以来转换一下我们的ImageView的大小了:

 

首先,图片的宽高比是2.43,而模拟器屏幕的宽度是480px,于是计算得到图片应该显示的高度是:480/2.43=197.53px(像素),但是一般时候,我们在xml文件中,设定的高度单位都是dip,所以这里要需要使用上面的转换公式:dip = px / (dpi / 160),而在这个模拟器的参数上可以查询到,它的dpi是240,所以计算得到高度应该是:

197.53/(240/160)=131.68(dip),约等于132dp,于是我们将上面的ImageView的高度设置成132dp:

 

?
1
<imageview android:layout_height= "132dp" android:layout_width= "fill_parent" android:scaletype= "fitXY" android:src= "@drawable/recommend_39" ></imageview>

再来看一下显示效果:

 

\

 

这样显示比例就完全正常了。

 

但是这样问题就解决了吗?答案是没有,我们不妨来换一个模拟器来显示,这次选用Nexus7的模拟器,分辨率为1200*1920,dpi为320,ImageView的参数不变,再来看看效果:

 

\

 

会发现图片被拉长了,这是为什么 呢,我们可以简单的再算一下:

nexus7 宽度为1200px,而dpi为320,图片比例为2.43,那么应该设置ImageView的高度dp值是:1200/2.43/(320/160)=246.91dp,而我们现在的高度却还是之前的132dp,当然会发现被拉伸了。

 

那怎么办,有点让人抓狂!!!

 

重写onMeasure方法,重新测量控件高度,实现多种屏幕下自适应图片显示

 

 

其实办法是有的,思路就是让控件(ImageView)自己根据不同的设备帮我们来计算这个高度,而不需要我们自己去计算,那要怎么做呢?就得用到上一篇博文中说到的onMeasure方法了,对measure/onMeasure方法不熟悉的同学,可以再去看一下Android自定义控件系列七:详解onMeasure()方法中如何测量一个控件尺寸(一)和Android自定义控件系列二:自定义开关按钮(一)等几篇文章,下面就开始:

 

首先要明确的一点就是,自定的view在调用view.measure()之前,是得不到控件的宽和高的,下面就一步步来写:

 

思路是首先写一个SmartImageView来继承自ImageView,并且添加相应的构造:

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.example.imageviewdemo;
 
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;
 
/**
  * @author : 苦咖啡
  *
  * @version : 1.0
  *
  * @date :2015年4月14日
  *
  *
  * @desc : SmartImageView,能根据给定的图片比例,自动调整宽高,解决拉伸变形的屏幕适配问题
  */
public class SmartImageView extends ImageView {
 
     public SmartImageView(Context context, AttributeSet attrs,
             int defStyleAttr, int defStyleRes) {
         super (context, attrs, defStyleAttr, defStyleRes);
     }
 
     public SmartImageView(Context context, AttributeSet attrs, int defStyle) {
         super (context, attrs, defStyle);
     }
 
     public SmartImageView(Context context, AttributeSet attrs) {
         super (context, attrs);
     }
 
     public SmartImageView(Context context) {
         super (context);
     }
 
}


 

然后在SmartImageView中,添加一个float类型的成员变量ratio作为图片的比例值,并且给它暴露一个setter方法,以便于设置图片比例。

 

?
1
2
3
4
5
6
/** 图片宽和高的比例 */
private float ratio = 2 .43f;
 
public void setRatio( float ratio) {
     this .ratio = ratio;
}


 

然后我们来重写onMeausre方法,如下:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Override
protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec) {
 
     // 父容器传过来的宽度方向上的模式
     int widthMode = MeasureSpec.getMode(widthMeasureSpec);
     // 父容器传过来的高度方向上的模式
     int heightMode = MeasureSpec.getMode(heightMeasureSpec);
 
     // 父容器传过来的宽度的值
     int width = MeasureSpec.getSize(widthMeasureSpec) - getPaddingLeft()
             - getPaddingRight();
     // 父容器传过来的高度的值
     int height = MeasureSpec.getSize(heightMeasureSpec) - getPaddingLeft()
             - getPaddingRight();
 
     if (widthMode == MeasureSpec.EXACTLY
             && heightMode != MeasureSpec.EXACTLY && ratio != 0 .0f) {
         // 判断条件为,宽度模式为Exactly,也就是填充父窗体或者是指定宽度;
         // 且高度模式不是Exaclty,代表设置的既不是fill_parent也不是具体的值,于是需要具体测量
         // 且图片的宽高比已经赋值完毕,不再是0.0f
         // 表示宽度确定,要测量高度
         height = ( int ) (width / ratio + 0 .5f);
         heightMeasureSpec = MeasureSpec.makeMeasureSpec(height,
                 MeasureSpec.EXACTLY);
     } else if (widthMode != MeasureSpec.EXACTLY
             && heightMode == MeasureSpec.EXACTLY && ratio != 0 .0f) {
         // 判断条件跟上面的相反,宽度方向和高度方向的条件互换
         // 表示高度确定,要测量宽度
         width = ( int ) (height * ratio + 0 .5f);
 
         widthMeasureSpec = MeasureSpec.makeMeasureSpec(width,
                 MeasureSpec.EXACTLY);
     }
 
     super .onMeasure(widthMeasureSpec, heightMeasureSpec);
}


 

对于onMeasure方法,有几点需要注意的:

1、父容器传过来的两个参数widthMeasureSpec和heightMeasureSpec,通过MeasureSpec.getMode()来获取参数中的模式,与控件的填充方式都是有对应关系的,这在上一篇博文:Android自定义控件系列七:详解onMeasure()方法中如何测量一个控件尺寸(一)中也有提到过

①xml布局文件中的fill_parent或具体值,或者是直接设置控件的LayoutParams中的width和height的具体值或者LayoutParams.FILL_PARENT填充父容器方式,都会对应让上面通过getMode获取参数中的模式为:MeasureSpect.EXACTLY,代表精确取值,因为除了直接指定值之外,填充父容器,也是精确值

 

②xml布局文件中设置wrap_content方式或者是在代码中设置LayoutParams.WRAP_CONTENT方式,都会让getMode变成MeasureSpect.AT_MOST

 

2、对于父容器传过来的高度或者宽度的值,不一定就是控件想要的宽度或者高度的值,这是因为模式不一样,这个值代表的意义也不一样,所以才会需要通过测量来改变高度或者宽度的值来达到想要的效果。

其中,如果是模式是EXACTLY,那么传过来的值就是具体指,也可以说是父容器想要我们的控件变成这个具体的大小。

但是模式如果是AT_MOST,那么传过来的值,就不会是具体的值,一般会是一个最大值,因为AT_MOST代表,不超过多少,那么这个值就是不超过的上限。

 

3、可以看到我们通过拿到父容器传过来的高度,宽度的模式和值,然后经过两种if-else判断来重新测量值的大小,这两种判断的依据就是:

①当宽度确定时(宽度为EXACTLY),高度模式不是EXACTLY时(也即高度不确定时),高度按照ratio的比例来重新测量

②当高度确定时(高度为EXACTLY),高度模式不是EXACTLY时(也即高度不确定时),宽度按照ratio的比例来重新测量

 

4、在测量完毕之后,因为已经得到了想要的宽度或者高度的具体的精确的值,我们再通过MeasureSpec.makeMeasureSpec()方法来调用精确的值和精确的模式,来合成一个宽度/高度方向上的合成值,最后将合成好的值传递给super.onMeasure(widthMeasureSpec, heightMeasureSpec);设置控件为我们想要的大小。

 

然后我们就可以在XML布局文件中,将之前的ImageView改成:com.example.imageviewdemo.SmartImageView

 

然后在代码中将其通过findviewbyid拿到它的对象,然后通过setRatio来设定图片的比例,如下:

 

?
1
2
3
4
5
6
7
<linearlayout android:layout_height= "match_parent" android:layout_width= "match_parent" android:orientation= "vertical" xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" >
 
     <com.example.imageviewdemo.smartimageview android:id= "@+id/siv" android:layout_height= "wrap_content" android:layout_width= "fill_parent" android:scaletype= "fitXY" android:src= "@drawable/recommend_39" >
 
     <textview android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:text= "描述文字信息........................." >
 
</textview></com.example.imageviewdemo.smartimageview></linearlayout>

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.example.imageviewdemo;
 
import android.app.Activity;
import android.os.Bundle;
 
public class MainActivity extends Activity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
         // 拿到SmartImageView对象
         SmartImageView siv = (SmartImageView) findViewById(R.id.siv);
         // 设置ratio的值
         siv.setRatio( 2 .43f);
     }
}

 

 

经过上面之后,我们会发现,不论在什么屏幕下,不论在横屏还是竖屏,都能以正确的比例显示图片了,


效果图:

 

 

\\

 

240*320/2.7寸设备 nexus7 1200*1920设备

 

 

 

 

\

androidTV(1920*1080)横屏显示设备

 

 

最后再留一个小地方,就是要显示图片的ratio,这个可以有多种方式,一种是从服务器传过来时,服务器指定了,那么我们可以直接拿到,然后设置好即可;然后是自己通过测量BitMap的宽高来确定比例,也是可以的。

 

设置ratio的方式可以像上面的调用setRatio()方法,也可以使用自定义属性,在XML文件中直接确定,关于自定义属性,由于不是文本重点,不了解的同学可以去看看专栏的这篇文章:Android自定义控件系列四:自定义开关按钮(三)--- 自定义属性,就会明白了。

 

之后会带来自定义View的另一个方法:onLayout方法的研究,敬请期待,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题 的相关文章

  • 自定义图像视图android

    我的自定义视图如下所示 package com mypackage import java util ArrayList import java util List import android content Context import
  • ImageView 内的 Android ProgressBar

    我有一个活动通过异步任务用数据填充列表视图 另外 我正在后台加载图片 在加载图片时 我想在图像视图中显示进度条而不是默认图标 我在互联网上搜索了任何示例等 但找不到任何有用的东西 我只找到一个响应 它说您必须使用图像视图和进度条进行框架布局
  • Android ImageView连续放大和缩小

    有什么办法可以放大和缩小ImageView在Android中不断 我尝试使用下面的代码 但只有一个缩放功能可以工作 缩放 xml
  • 如何在Android中创建圆形ImageView? [复制]

    这个问题在这里已经有答案了 我怎样才能创建一个圆角ImageView在安卓中 我已经尝试过以下代码 但它运行不正常 Code Bitmap circleBitmap Bitmap createBitmap bitmap getWidth b
  • android:在imageview中拉伸图像以适合屏幕

    我有一个imageview其高度和宽度设置为fill parent with a linearlayout具有相同的值集 所以我想这应该设置我的图像以适合屏幕 但它只适合 80 横向模式下的顶部和底部边距 我尝试了以下代码但没有成功 Dis
  • JavaFX 在列表视图中显示字符串附近的图像[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想在列表视图中的字符串附近显示一条消息我尝试查找它但我不太理解它我从网站上尝试了这个http docs oracle com javafx
  • 将图像传递给另一个活动

    感谢这个网站 我弄清楚了如何在活动之间传递字符串值 但是我在传递图像时遇到了麻烦 我想要做的是让用户单击一个按钮来打开图库并允许选择图片 然后我有另一个按钮可以打开另一个显示 ImageView 的活动 我希望能够从上一个活动中选择 Ima
  • 如何判断拼图是否完成?

    我正在准备一款像拼图这样的小游戏 为此我在布局中使用了 9 个图像视图和 9 个不同的图像 在启动时将图像设置为 imageview 这些是实际图像 随机播放后用户将滑动图像以完成拼图 我想检查修改后的图像与实际图像的 天气是否相等 如果它
  • 几秒钟后更改 ImageView

    我正在尝试实现一个简单的活动 让用户插入密码 我有一个 gridview 其中包含 9 个要使用的图像和 4 个将作为所选图像的图像视图 单击 gridview 上的项目时 相应的图像将填充所选图像 现在的问题是 我希望 4 个图像视图的行
  • 无法在 android 中对 ImageViews 使用 srcCompat

    我正在使用设计支持库 23 2 我已在 build gradle 中添加了这些行 因为我的 Gradle 插件版本为 1 5 defaultConfig applicationId com abc xyz minSdkVersion 16
  • 通过代码在LinearLayout中对齐Imageview

    问题很简单 我正在使用代码动态创建一个图像视图 ImageView btnSend new ImageView this 并将其添加到 LinearLayout 中 问题是我想保持右对齐 怎么做 提前致谢 尝试使用 LayoutParams
  • ImageView:调整ViewBounds不适用于layout_height =“fill_parent”?

    我试图将其放在单行中EditText与ImageView在左侧 但我无法正确缩放图像以匹配文本输入的高度 布局很简单
  • 使用毕加索库时目标不能为空

    我实现了一个listView使用 Picasso Library 2 4 0 我遇到了一个问题 发生了什么 我使用 Android Studio 启动应用程序 然后转到我实现的特定片段listView 一切看起来都很好 所有图像都正在加载
  • 为什么找不到ImageView类?

    当我转到图形布局时 我在创建第一个 Android 应用程序 pdf Android Application Development for For Dummies 中的静默切换模式 时遇到了麻烦 在 main xml 文件中插入了 Ima
  • 使用 Glide 库设置图像加载完成后进度条的可见性

    您好 我想要一个图像进度条 该进度条将在图像加载时显示 但当图像加载完成时 我想将其设置为消失 早些时候我为此使用了毕加索库 但我不知道如何将它与 Glide 库一起使用 我知道有一些资源就绪功能 但我不知道如何使用它 谁能帮我 毕加索图书
  • Android - 在图像/缩略图上覆盖播放按钮的最佳方式

    我有一个 Android 应用程序 可以播放音频 视频并显示图片 对于视频 我想在预览图像顶部以及列表视图中叠加一个播放按钮 现在我的做法是使用 xml 中的 ImageView 然后可绘制对象是一个图层图层列表 我以编程方式定义它 因为其
  • ImageView 中的全尺寸图像

    我正在尝试在 ImageView 中绘制图像 但我希望它不缩放 并根据需要使用滚动条 我怎样才能做到这一点 现在我只有一个可绘制集作为 XML 中 ImageView 的 android src 这会自动缩放图像以适应屏幕宽度 我读到这可能
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • Android Studio 如何检查哪个Imageview被点击并为其分配一个Int值?

    活动一 我有 12 个图像视图 用户单击其中任意一个 如果他们单击 ImageView 1 我们为其分配一个 int 值 image id 1 活动二 使用 If else 语句检查他们单击了哪个图像 Intent result inten
  • 如何为Android设置图像顶部和底部相同的大小?

    我想在中心 顶部和底部显示相同尺寸的图像 请参阅下面的屏幕 有人知道请给我代码 谢谢大家 Use android scaleType centerInside or ImageView setScaleType ImageView Scal

随机推荐

  • Java 面向对象三大特征

    Java是一种面向对象的编程语言 其中包含三大特征 封装 封装是指将类的接口和实现分开 并将实现隐藏在类内部 这样 其他类就无法直接访问类的内部实现 只能通过公共的接口来访问类的功能 封装有助于保护类的内部实现不被损坏 并有助于更好地组织代
  • 20220614 笔记

    文章目录 第一章 引 论 1 2 为什么要进行软件测试 1 3 什么是软件测试 1 4 软件测试和软件开发的关系 SQA 软件测试与Sqa的关系 4种导向 5大学派 第二章 软件测试的基本概念 2 1 2 软件缺陷定义 2 1 5 修复软件
  • mysql实现分组查询每个班级的前三名

    mysql实现分组查询每个班级的前三名 set character set server utf8mb4 DROP TABLE IF EXISTS student CREATE TABLE IF NOT EXISTS student id
  • 30个实操技巧--闲鱼无货源模式

    闲鱼是一个把家里的闲置物品放到平台上二手转卖 从而获得对应的资金的平台 但是有些人懒得去寄快递但又想赚到钱 这就出来了闲鱼无货源 虽然闲鱼的门槛比较低 没有成本的投入 但是 也不是你想做就能做的 首先 自己不懂怎么做 就算开个店铺也是凉凉
  • 完美解决ViewPager+Fragment二次加载空白问题

    ViewPager Fragment使用的还是比较频繁的 但是当我打开应用第一次进入时很正常 然而第二次进入的时候却显示的是空白 当时感觉很是迷茫 可是仔细一查 原来是第二次加载的时候重复调用了onCreateView 这个方法 重新new
  • IDEA中超级好用的十余款插件,你用过多少

    IDEA中超级好用的十余款插件 插件一 Background Image Plus 插件二 CodeGlance插件 2019版本自带 插件三 translation 翻译插件 插件四 Rainbow Brackets 彩色括号 插件五 g
  • SPSS多元线性回归残差分析的基本方法

    写这篇博客 也是觉得网上很多人没有把这个讲清楚 据这个网页中的网友介绍 残差分析包括以下内容 残差是否服从均值为零的正态分布 残差是否为等方差的正态分布 残差序列是否独立 借助残差探测样本中的异常值 其中 判断残差的分布可以在SPSS中通过
  • 基于fpga的舵机控制(MG995)

    1 MG995舵机原理 a 这是一款由脉冲控制的舵机 周期为20ms 高脉冲部分所占多少就决定了舵机转动多少度 b 高脉冲部分与角度关系 0 5ms 0 1ms 45 1 5ms 90 2ms 135 2 5ms 180 2 设计需求 通过
  • C++ break 语句

    C 中 break 语句有以下两种用法 当 break 语句出现在一个循环内时 循环会立即终止 且程序流将继续执行紧接着循环的下一条语句 它可用于终止 switch 语句中的一个 case 如果您使用的是嵌套循环 即一个循环内嵌套另一个循环
  • Kioptrix Level 2-writeup

    Kioptrix Level 2 writeup 0x00 信息收集 目标机器 16 16 16 178 kali攻击机 16 16 16 177 使用nmap来个端口服务扫描 浏览器打开http 16 16 16 178看看 第一眼看上去
  • Java爬虫-使用爬虫下载千张美女图片!

    目的 爬取搜狗图片上千张美女图片并下载到本地 准备工作 爬取地址 https pic sogou com pics query E7 BE 8E E5 A5 B3 分析 打开上面的地址 按F12开发者工具 NetWork XHR 页面往下滑
  • Python:关于RollRate&Vintage的研究与应用

    RollRate 在当前催收水平下 不同逾期天数转换为坏账的概率 Vintage 通过账龄分析评估放款的质量 其中 逾期率的计算有两种方式 第一种 应收口径下 风险偏好偏保守 分子 已逾期的借款其所有已到期但未还本金和未到期本金 全部计入逾
  • 从QWindow到QWidget(Qt5)

    Qt5下 QWidget系列从QtGui中被剥离出去 成为单独的QtWidget模块 随着Qt Quick2的引入 QtDeclarative也逐渐和QWidget系列也脱离关系 最终 在Qt5下的GUI编程 有两套不同的东西 QtWidg
  • 机器学习之梯度提升树(机器学习技法)

    梯度提升树模型 Gradient Boosted Decision Tree 与随机森林的对比 前面提到的随机森林使用Bagging的方式融合起来 也就是使用bootstrapping进行抽样得到不同的样本再加上不同的特征选择训练出不同的决
  • RNN->LSTM->BiLSTM神经网络结构

    最近在学习 自然语言处理 基于预训练模型的方法 打打公式吧 RNN Recurrent Neural Network h t t a n h
  • 软件测试简历项目经验怎么写,没有项目经验?

    怎么办 只能接受低薪工作吗 No No No 本文就教大家如何解决这个问题 为了帮助大家彻底解决 没有项目 这个拦路虎 接下来文章将从以下几个方面进行展开 1 应该去哪找项目 2 在众多的项目中 该怎么挑选适合自己的 3 找到一个项目 应该
  • labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换

    目录 1 labelimg标注VOC格式和yolo格式介绍 1 1 voc格式 1 2 yolo数据格式介绍 2 voc格式数据和yolo格式数据相互转换 2 1 voc转yolo代码 2 2 yolo转voc格式代码 1 labelimg
  • 解决项目中出现的404 Not Found nginx/1.15.0

    1 配置好nginx php环境 运行 sudo nginx sudo php fpm 2 将项目放在服务器运行目录中 usr local var www 3项目为 newdailian 配置好数据库导入数据dailian sql 4 由于
  • finclip小程序代码结构与微信小程序代码结构

    微信小程序代码结构 JSON 配置 JSON 是一种数据格式 并不是编程语言 在小程序中 JSON扮演的静态配置的角色 我们可以看到在项目的根目录有一个 app json 和 project config json 此外在 pages lo
  • Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题

    使用ImageView会遇到的问题 在Android应用中 都少不了图片的显示 ImageView 轮播图 ViewPager等等 很多都是来显示图片的 比如一个广告条的轮播效果 参看博客 广告条效果实现 ViewPager加载大图片 Lr