Android动画

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

目录

  • 一、导读
  • 二、概览
  • 三、动画实现
    • 3.1 帧动画
      • 资源文件中实现帧动画
      • 代码中实现帧动画
    • 3.2 补间动画
      • 3.2.1 基本语法
      • 3.2.2 使用方式
      • 3.2.3 我们也可以在java代码中直接使用
    • 3.3 动画插值器
      • 自定义插值器
    • 3.4 属性动画
      • xml中定义属性动画
      • 代码中定义属性动画
  • 四、属性动画与视图动画的区别
  • 五、 推荐阅读

在这里插入图片描述

一、导读

我们继续总结学习基础知识,温故知新。

本文我们就来讲讲安卓动画相关的知识。

二、概览

在Android中,动画我们大致分为两大类,

  • 1、视图动画,即帧动画补间动画
    • 补间动画:通过使用 Animation 对单张图片执行一系列转换来创建动画,这是一种在 XML 中定义的动画(也可以代码配置),用于对图形执行旋转、淡出、移动和拉伸等转换。
    • 帧动画:通过使用 AnimationDrawable 按顺序显示一系列图片来创建动画,就像放电影一样,一帧一帧的。
  • 2、属性动画:通过使用 Animator 在设定的时段内修改对象的属性值来创建动画。

下面我们分别来讲这几种动画实现。

三、动画实现

3.1 帧动画

在 XML 中定义的按顺序显示一系列图片的动画(如电影)。我们在实际开发中可以用两种方式来做。

资源文件中实现帧动画

帧动画编译后的资源数据类型为 AnimationDrawable ,动画的开始是AnimationDrawable控制的。

1、 新建动画文件bg_animation.xml,文件位置:

res/drawable/filename.xml
文件名用作资源 ID。语法如下:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot=["true" | "false"] >                                   如果您想要执行一次动画,则为 "true";如果要循环播放动画,则为 "false"<itemandroid:drawable="@[package:]drawable/drawable_resource_name"      可绘制资源android:duration="integer" />                                      显示此帧的持续时间,以毫秒为单位
</animation-list>

2、使用

    // 要播放动画的组件设置resourceaivingImg.setImageResource(R.drawable.bg_animation);// 通过组件找到对应的 AnimationDrawable ,资源文件编译后,就是这个玩意,所以要用到AnimationDrawable animationDrawable = (AnimationDrawable) aivingImg.getDrawable();// 开始动画animationDrawable.start();

代码中实现帧动画

我们知道帧动画编译后的资源数据类型为 AnimationDrawable,所以可以直接操作这个类来播放动画。

AnimationDrawable常用方法

addFrame:添加一幅图片帧,并指定该帧的持续时间(单位毫秒)。
setOneShot:设置是否只播放一次。为true表示只播放一次,为false表示循环播放。
start:开始播放。注意,设置宿主视图后才能进行播放。
stop:停止播放。
isRunning:判断是否正在播放。

上代码
调用ImageView对象的setImageDrawable方法将动画图形加载到图像视图中

    AnimationDrawable ad_frame = new AnimationDrawable();ad_frame.addFrame(getResources().getDrawable(R.mipmap.flow_p1),50);ad_frame.addFrame(getResources().getDrawable(R.mipmap.flow_p2),50);ad_frame.setOneShot(false);iv_pic.setImageDrawable(ad_frame);ad_frame.start();

3.2 补间动画

补间动画是在 XML 中定义的动画,一种二维空间动画,补间动画根据动画的起点、终点、大小、旋转情况和其他常见方面来计算动画,
动画的方式无非就几种方式,旋转、淡出(透明度)、移动和拉伸等,该动画是作用在整个view上的,包含背景图。

动画编译后的资源数据类型为 Animation ,动画的开始是Animation控制的,另外还有 AnimationSet 承载属性。

3.2.1 基本语法

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"   容纳其他动画元素 或其他 <set> 元素的容器。代表 AnimationSetandroid:duration="5000"                                           动画时间,单位毫秒android:startOffset="1000"                                        动画延迟执行时间android:fillBefore="true"                                         动画播放完后,视图是否会停留在动画开始的状态,默认为trueandroid:fillAfter="false"                                         动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为falseandroid:fillEnabled="true"                                        是否应用fillBefore值,对fillAfter值无影响,默认为trueandroid:repeatMode="restart"                                      选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restartandroid:repeatCount="3"                                           重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复 android:interpolator="@[package:]anim/interpolator_resource"  插值器资源android:shareInterpolator=["true" | "false"] >                如果要在所有子元素中共用同一插值器,则为 "true"<alpha                                                淡入或淡出动画(透明度)。代表 AlphaAnimation。android:fromAlpha="float"                            浮点数。起始不透明度偏移,0.0 表示透明,1.0 表示不透明。android:toAlpha="float" />                           浮点数。结束不透明度偏移,0.0 表示透明,1.0 表示不透明。<scale                                               拉伸动画。代表 ScaleAnimation。android:fromXScale="float"                           起始 X 尺寸偏移,其中 1.0 表示不变android:toXScale="float"                             结束 X 尺寸偏移,其中 1.0 表示不变。android:fromYScale="float"                           起始 Y 尺寸偏移,其中 1.0 表示不变android:toYScale="float"                             结束 Y 尺寸偏移,其中 1.0 表示不变android:pivotX="float"                               在对象缩放时要保持不变的 X 坐标android:pivotY="float" />                            在对象缩放时要保持不变的 Y 坐标<translate                                           竖直和/或水平 移动。代表 TranslateAnimationandroid:fromXDelta="float"                           浮点数或百分比。起始 X 偏移量。表示方式:相对于正常位置的像素数(例如 "5");相对于元素宽度的百分比(例如 "5%");或相对于父项宽度的百分比(例如 "5%p")。android:toXDelta="float"                             浮点数或百分比。结束 X 偏移量。表示方式:相对于正常位置的像素数(例如 "5");相对于元素宽度的百分比(例如 "5%");或相对于父项宽度的百分比(例如 "5%p")。android:fromYDelta="float"                           浮点数或百分比。起始 Y 偏移量。表示方式:相对于正常位置的像素数(例如 "5");相对于元素高度的百分比(例如 "5%");或相对于父项高度的百分比(例如 "5%p")。android:toYDelta="float" />                          浮点数或百分比。结束 Y 偏移量。表示方式:相对于正常位置的像素数(例如 "5");相对于元素高度的百分比(例如 "5%");或相对于父项高度的百分比(例如 "5%p")。<rotate                                              旋转动画。代表 RotateAnimation。android:fromDegrees="float"                          浮点数。起始角度位置,以度为单位。android:toDegrees="float"                            浮点数。结束角度位置,以度为单位。android:pivotX="float"                               浮点数或百分比。旋转中心的 X 坐标。表示方式:相对于对象左边缘的像素数(例如 "5");相对于对象左边缘的百分比(例如 "5%");或相对于父级容器左边缘的百分比(例如 "5%p")。android:pivotY="float" />                            浮点数或百分比。旋转中心的 Y 坐标。表示方式:相对于对象上边缘的像素数(例如 "5");相对于对象上边缘的百分比(例如 "5%");或相对于父级容器上边缘的百分比(例如 "5%p")。<set>...</set>
</set>

动画的定义,也可以不用set组合,直接定义单个动画,如

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"android:duration="5000"                                           动画时间,单位毫秒android:startOffset="1000"                                        动画延迟执行时间android:fillBefore="true"                                         动画播放完后,视图是否会停留在动画开始的状态,默认为trueandroid:fillAfter="false"                                         动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为falseandroid:fillEnabled="true"                                        是否应用fillBefore值,对fillAfter值无影响,默认为trueandroid:repeatMode="restart"                                      选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restartandroid:repeatCount="3"                                           重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复 android:interpolator="@android:interpolator/decelerate_quad"      插值器资源android:fromAlpha="0.0"android:toAlpha="1.0" />
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"android:duration="5000"                                           动画时间,单位毫秒android:startOffset="1000"                                        动画延迟执行时间android:fillBefore="true"                                         动画播放完后,视图是否会停留在动画开始的状态,默认为trueandroid:fillAfter="false"                                         动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为falseandroid:fillEnabled="true"                                        是否应用fillBefore值,对fillAfter值无影响,默认为trueandroid:repeatMode="restart"                                      选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restartandroid:repeatCount="3"                                           重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复 android:interpolator="@android:interpolator/decelerate_quad"      插值器资源android:fromXScale="float"                           起始 X 尺寸偏移,其中 1.0 表示不变android:toXScale="float"                             结束 X 尺寸偏移,其中 1.0 表示不变。android:fromYScale="float"                           起始 Y 尺寸偏移,其中 1.0 表示不变android:toYScale="float"                             结束 Y 尺寸偏移,其中 1.0 表示不变android:pivotX="float"                               在对象缩放时要保持不变的 X 坐标android:pivotY="float" />                            在对象缩放时要保持不变的 Y 坐标
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"android:duration="5000"                                           动画时间,单位毫秒android:startOffset="1000"                                        动画延迟执行时间android:fillBefore="true"                                         动画播放完后,视图是否会停留在动画开始的状态,默认为trueandroid:fillAfter="false"                                         动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为falseandroid:fillEnabled="true"                                        是否应用fillBefore值,对fillAfter值无影响,默认为trueandroid:repeatMode="restart"                                      选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restartandroid:repeatCount="3"                                           重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复 android:interpolator="@android:interpolator/decelerate_quad"      插值器资源android:fromXDelta="float"                           浮点数或百分比。起始 X 偏移量。表示方式:相对于正常位置的像素数(例如 "5");相对于元素宽度的百分比(例如 "5%");或相对于父项宽度的百分比(例如 "5%p")。android:toXDelta="float"                             浮点数或百分比。结束 X 偏移量。表示方式:相对于正常位置的像素数(例如 "5");相对于元素宽度的百分比(例如 "5%");或相对于父项宽度的百分比(例如 "5%p")。android:fromYDelta="float"                           浮点数或百分比。起始 Y 偏移量。表示方式:相对于正常位置的像素数(例如 "5");相对于元素高度的百分比(例如 "5%");或相对于父项高度的百分比(例如 "5%p")。android:toYDelta="float"/>
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"android:duration="5000"                                           动画时间,单位毫秒android:startOffset="1000"                                        动画延迟执行时间android:fillBefore="true"                                         动画播放完后,视图是否会停留在动画开始的状态,默认为trueandroid:fillAfter="false"                                         动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为falseandroid:fillEnabled="true"                                        是否应用fillBefore值,对fillAfter值无影响,默认为trueandroid:repeatMode="restart"                                      选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restartandroid:repeatCount="3"                                           重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复 android:interpolator="@android:interpolator/decelerate_quad"      插值器资源android:fromDegrees="float"                          浮点数。起始角度位置,以度为单位。android:toDegrees="float"                            浮点数。结束角度位置,以度为单位。android:pivotX="float"                               浮点数或百分比。旋转中心的 X 坐标。表示方式:相对于对象左边缘的像素数(例如 "5");相对于对象左边缘的百分比(例如 "5%");或相对于父级容器左边缘的百分比(例如 "5%p")。android:pivotY="float"  />

资源引用:
在 Java 中:R.anim.filename
在 XML 中:@[package:]anim/filename

3.2.2 使用方式

  1. Android 项目中新建 res/anim/ 目录。
  2. 新建一个动画的XML文件,该文件必须具有单个根元素:它可以是单个 、、、 或插值器元素,
    也可以是包含这些元素组的 元素(可能包含其他 )
    <set android:shareInterpolator="false"><scaleandroid:interpolator="@android:anim/accelerate_decelerate_interpolator"android:fromXScale="1.0"android:toXScale="1.4"android:fromYScale="1.0"android:toYScale="0.6"android:pivotX="50%"android:pivotY="50%"android:fillAfter="false"android:duration="700" /><set android:interpolator="@android:anim/decelerate_interpolator"><scaleandroid:fromXScale="1.4"android:toXScale="0.0"android:fromYScale="0.6"android:toYScale="0.0"android:pivotX="50%"android:pivotY="50%"android:startOffset="700"android:duration="400"android:fillBefore="false" /><rotateandroid:fromDegrees="0"android:toDegrees="-45"android:toYScale="0.0"android:pivotX="50%"android:pivotY="50%"android:startOffset="700"android:duration="400" /></set></set>
  1. 代码引用,开始动画
    ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);spaceshipImage.startAnimation(hyperspaceJumpAnimation);

3.2.3 我们也可以在java代码中直接使用

    Animation translateAnimation = new TranslateAnimation(0, 500, 0, 500);Animation alphaAnimation = new AlphaAnimation(...);Animation scaleAnimation = new ScaleAnimation(...);Animation rotateAnimation = new RotateAnimation(...);translateAnimation.setDuration(3000);// 固定属性的设置都是在其属性前加“set”,如setDuration()view.startAnimation(translateAnimation);

上面这些代码也可以通过set进行组合使用

AnimationSet outSet = new AnimationSet(true);TranslateAnimation animOut = new TranslateAnimation(...);outSet.addAnimation(animOut);AlphaAnimation alphaAnimaOut = new AlphaAnimation(1f, 0f);outSet.addAnimation(alphaAnimaOut);outSet.setDuration(150L);view.startAnimation(outSet);

3.3 动画插值器

插值器是在 XML 中定义的一种影响动画变化速率的动画修改器,可让现有的动画效果加速、减速、重复、弹跳等。

插值器通过 android:interpolator 属性应用于动画元素,该属性的值是对插值器资源的引用。

包含有以下类型:

插值器类资源 ID描述
AccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolator变化速率缓慢开始和结束,但在中间加速
AccelerateInterpolator@android:anim/accelerate_interpolator变化率开始缓慢然后加速的插值器
AnticipateInterpolator@android:anim/anticipate_interpolator开始向后然后向前猛冲
AnticipateOvershootInterpolator@android:anim/anticipate_overshoot_interpolator开始向后,然后向前猛冲并超过目标值,最后回到最终值
BounceInterpolator@android:anim/bounce_interpolator变化在最后反弹
CycleInterpolator@android:anim/cycle_interpolator将动画重复指定的周期数。变化率遵循正弦曲线模式
DecelerateInterpolator@android:anim/decelerate_interpolator其变化率开始时很快,然后减速
LinearInterpolator@android:anim/linear_interpolator变化率恒定的插值器
OvershootInterpolator@android:anim/overshoot_interpolator其中的变化向前猛冲并超过最后一个值,然后返回

自定义插值器

如果您对平台提供的插值器不满意,则可以使用修改过的属性创建自定义插值器资源,方式如下:

  1. Android 项目中新建 res/anim/ 目录。
  2. 新建一个动画的XML文件,
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"  差值器的名字, 实现的名称都以小写字母开头android:attribute_name="value"/>
<accelerateDecelerateInterpolator>变化率在开始和结束时缓慢,但在中间会加快。无属性。<accelerateInterpolator>变化率在开始时较为缓慢,然后会加快。属性:android:factor浮点数。加速率。默认值为 1。<anticipateInterpolator>先反向变化,然后再急速正向变化。属性:android:tension浮点数。要应用的张力。默认值为 2。<anticipateOvershootInterpolator>先反向变化,再急速正向变化并超过目标值,然后以最终值结束。属性:android:tension浮点数。要应用的张力。默认值为 2。android:extraTension浮点数。张力要乘以的倍数。默认值为 1.5。<bounceInterpolator>变化会在结束时弹跳。无属性。<cycleInterpolator>按指定的循环次数重复动画。变化率符合正弦曲线图。属性:android:cycles整数。循环次数。默认值为 1。<decelerateInterpolator>变化率开始时很快,然后减速。属性:android:factor浮点数。减速率。默认值为 1。<linearInterpolator>变化率恒定不变。无属性。<overshootInterpolator>先急速正向变化,再超过最终值,然后回到最终值。属性:android:tension浮点数。要应用的张力。默认值为 2。

如:

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"android:tension="7.0"/>

3.4 属性动画

在 XML 中定义的动画,用于在设定的一段时间内修改目标对象的属性,例如背景颜色或 alpha 值。

其对应的java类 ValueAnimator、ObjectAnimator 或 AnimatorSet

xml中定义属性动画

  1. 新建目录及文件 res/animator/filename.xml

语法如下:

<setandroid:ordering=["together" | "sequentially"]>     指定此集合中动画的播放顺序,  sequentially	依序播放此集合中的动画。 together(默认)	同时播放此集合中的动画。<objectAnimatorandroid:propertyName="string"                     要添加动画效果的对象的属性,如"alpha" 或 "backgroundColor"android:duration="int"                            整数。动画的时间,以毫秒为单位。默认为 300 毫秒。android:valueFrom="float | int | color"           浮点数、整数或颜色。动画属性的起始值。如果未指定,则动画将从属性的 get 方法获得的值开始。颜色以六位十六进制数字表示,例如 #333333。android:valueTo="float | int | color"             浮点数、整数或颜色。必需。动画属性的结束值。颜色以六位十六进制数字表示,例如 #333333android:startOffset="int"                         整数。调用 start() 后动画延迟的毫秒数android:repeatCount="int"                         整数。动画的重复次数。设为 "-1" 表示无限次重复,也可设为正整数。例如,值 "1" 表示动画在初次播放后重复播放一次,因此动画总共播放两次。默认值为 "0",表示不重复。android:repeatMode=["restart" | "reverse"]        整数。动画播放到结尾处的行为。android:repeatCount 必须设置为正整数或 "-1",该属性才有效。设置为 "reverse" 可让动画在每次迭代时反向播放,设置为 "restart" 则可让动画每次从头开始循环播放。android:valueType=["intType" | "floatType"]/>     如果值为颜色,则不要指定此属性。动画框架会自动处理颜色值。  intType	指定动画值为整数。    floatType(默认)	指定动画值为浮点数。<animatorandroid:duration="int"                            整数。动画的时间,以毫秒为单位。默认为 300 毫秒。android:valueFrom="float | int | color"           浮点数、整数或颜色。必需。动画的起始值。颜色以六位十六进制数字表示,例如 #333333。android:valueTo="float | int | color"             浮点数、整数或颜色。必需。动画的结束值。颜色以六位十六进制数字表示,例如 #333333。android:startOffset="int"                         整数。调用 start() 后动画延迟的毫秒数。android:repeatCount="int"android:repeatMode=["restart" | "reverse"]android:valueType=["intType" | "floatType"]/><set>...</set>
</set>

其实也可以不用 set包裹,定义单一的动画

<objectAnimatorandroid:propertyName="string"android:duration="int"android:valueFrom="float | int | color"android:valueTo="float | int | color"android:startOffset="int"android:repeatCount="int"android:repeatMode=["restart" | "reverse"]android:valueType=["intType" | "floatType"]/>
<animatorandroid:duration="int"android:valueFrom="float | int | color"android:valueTo="float | int | color"android:startOffset="int"android:repeatCount="int"android:repeatMode=["restart" | "reverse"]android:valueType=["intType" | "floatType"]/>
  1. 资源引用:
    在 Java 或 Kotlin 代码中:R.animator.filename
    在 XML 中:@[package:]animator/filename

我们举例:
定义xml动画,然后在代码中调用开始动画。

<set android:ordering="sequentially"><set><objectAnimatorandroid:propertyName="x"android:duration="500"android:valueTo="400"android:valueType="intType"/><objectAnimatorandroid:propertyName="y"android:duration="500"android:valueTo="300"android:valueType="intType"/></set><objectAnimatorandroid:propertyName="alpha"android:duration="500"android:valueTo="1f"/>
</set>

开始动画

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.animator.property_animator);
set.setTarget(myObject);            // 必须操作
set.start();

代码中定义属性动画

    ValueAnimator animation = ValueAnimator.ofFloat(0f, 100f);animation.setDuration(1000);animation.start();ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(view, "alpha", 0.3f, 1f);objectAnimator1.setDuration(1000);objectAnimator1.setRepeatCount(ValueAnimator.INFINITE);objectAnimator1.setRepeatMode(ValueAnimator.REVERSE);ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(view, "rotation", 0.0F, 360f);objectAnimator2.setDuration(5000);objectAnimator2.setRepeatCount(ValueAnimator.INFINITE);AnimatorSet animatorSet = new AnimatorSet();animatorSet.setInterpolator(new LinearInterpolator());animatorSet.playTogether(objectAnimator1, objectAnimator2);animatorSet.start();

这块东西比较多,由于篇幅原因,我们另起一篇。

属性动画

四、属性动画与视图动画的区别

1、 视图动画系统仅提供为 View 对象添加动画效果的功能,因此,如果您想为非 view 对象添加动画效果,则必须实现自己的代码才能做到。
视图动画系统也存在一些限制,因为它仅公开view 对象的部分方面来供您添加动画效果;例如,您可以对视图的缩放和旋转添加动画效果,但无法对背景颜色这样做

2、 视图动画系统的另一个缺点是它只会在绘制视图的位置进行修改,而不会修改实际的视图本身。例如,如果您为某个按钮添加了动画效果,使其可以在屏幕上移动,该按钮会正确绘制,
但能够点击按钮的实际位置并不会更改,因此您必须通过实现自己的逻辑来处理此事件。

动画

五、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

ddd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】触发器trigger / 事件

文章目录 1. 触发器 trigger1.1 触发器命名1.2 new和old关键字1.3 案例&#xff1a;insert 触发器1.4 练习&#xff1a;delete 触发器1.5 查看触发器 show triggers1.6 使用触发器记录对表的操作 2 事件2.1 打开 / 关闭事件调度器2.2 创建事件 create event2.3 查看&#xff0c…

软件设计师——数据结构(二)

&#x1f4d1;前言 本文主要是【数据结构】——软件设计师——数据结构的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…

5个免费、跨平台的SQLite数据库可视化工具

前言 SQLite是一个轻量级的嵌入式关系型数据库&#xff0c;目前最新的版本是 SQLite3。今天推荐5个实用的SQLite数据库可视化工具(GUI)&#xff0c;帮助大家更好的管理SQLite数据库。 什么是SQLite&#xff1f; SQLite是一个轻量级的嵌入式关系型数据库&#xff0c;它以一个…

dp中最短编辑距离的笔记(分析dp)

dp分析往往就是看最后一步的变化。 分析&#xff1a; 设a串长度为i&#xff0c;b串长度为j。题目要求为通过三种操作将a字符串转化为b字符串的最少次数。 删除操作&#xff1a; 把a[i]删除后a[1~i]和b[1~j]匹配&#xff0c;所以可以得到f[i - 1][j] 1&#xff0c;在此之前要先…

连锁管理系统是什么?有哪些功能?

连锁管理系统帮助门店实现POS收银管理、门店管理、采购订货管理、线上商城搭建、供应链管理一体化管理系统&#xff0c;快速提高门店管理效率&#xff0c;无论你的门店有多少&#xff0c;连锁总部都能通过系统随时洞察监管门店的所有运营数据。 连锁管理系统由&#xff1a;1个…

Eslint 要被 Oxlint替换了吗

什么是 Oxlint 由于最近的rust在前端领域的崛起,基于rust的前端生态链遭到rust底层重构,最近又爆出OxLint,是一款基于Rust的linter工具。Oxlint在国外前端圈引起热烈讨论,很多大佬给出了高度评价。 事实上,Oxlint 是 Oxc 项目旗下的一款产品,专为 JavaScript 和 TypeSc…

Java解决不同路径问题

Java解决不同路径问题 01 题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少…

linux修改mysql默认端口(很明智的选择因为后面会遇到各种问题)

1. 登录到mysql查看当前的端口号&#xff1a; show global variables like ‘port’; 2.编辑/etc/my.conf 文件添加port3506 这样的样式 保存退出&#xff1b; 内容: mysqld] port3506 datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock usermysql # Disabling sy…

【CMU 15-445】Lecture 10: Sorting Aggregations Algorithms 学习笔记

Sorting & Aggregations Algorithms SortingTop-N Heap SortExternal Merge Sort2-WAY External Merge SortK-WAY External Merge SortDouble Buffering Optimization AggregationsSortingHashing 本节课主要介绍的是数据库系统中的排序算法以及聚合算法 Sorting 排序算法…

【TB作品】51单片机 实物+仿真-电子拔河游戏_亚博 BST-M51

代码工程。 http://dt4.8tupian.net/2/28880a66b12880.pg3这段代码是用于一个数字拔河游戏的嵌入式系统&#xff0c;采用了基于8051架构的单片机&#xff0c;使用Keil C51编译器。 主要功能包括&#xff1a; 数码管显示&#xff1a;使用了四个数码管&#xff08;通过P2的控制…

【华为数据之道学习笔记】5-4 数据入湖方式

数据入湖遵循华为信息架构&#xff0c;以逻辑数据实体为粒度入湖&#xff0c;逻辑数据实体在首次入湖时应该考虑信息的完整性。原则上&#xff0c;一个逻辑数据实体的所有属性应该一次性进湖&#xff0c;避免一个逻辑实体多次入湖&#xff0c;增加入湖工作量。 数据入湖的方式…

配置 vim 默认显示行号 行数 :set number

vi ~/.vimrc 最后添加一行 :set number保存退出&#xff0c;再次 vim 打开文件&#xff0c;默认就会显示行号了

Feign-实现Feign最佳实践

目录 一、实现最佳实践的步骤&#xff08;方式二&#xff09; 1.1 首先创建一个module&#xff0c;命名为feign-api&#xff0c;然后引入feign的starter依赖 1.2.将order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目 1.3.在order-se…

Kali Linux安装Xrdp远程桌面工具结合内网穿透实现远程访问Kali桌面

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于&#xff0c;它允许用户从远程位置访问Kali系统&#xff0c;而无需直接物理访…

vulnhub7

靶机地址&#xff1a;https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova 这次的靶机风格比较偏向 OSCP 风格&#xff0c;区别于传统的 CTF 类型的靶机&#xff0c;只需要提权到 root 即可&#xff0c;而且这次打靶确实触碰到很多知识盲区了 提示&#xff1a;本地…

安卓开发学习---kotlin版---笔记(二)

UI学习 UI分类 安卓的UI分为两大类&#xff1a;一类叫做View视图&#xff0c;一类叫做ViewGroup容器 View视图&#xff1a;TextView,Button,ImageView都是常见的视图ViewGroup容器&#xff1a;内部尅承载、放置、添加View视图的容器 布局方式 安卓布局主要有&#xff1a;线…

【Qt图书管理系统】4.系统设计与详细设计

文章目录 核心流程图软件架构设计流程图软件开发类图及功能点 核心流程图 用户登录图书查询图书借阅图书归还账户管理 软件架构设计 流程图 软件开发类图及功能点 Dlg_Login 登录界面 Cell_Main 主窗体 Cell_MyBook 我的书籍 Cell_BookMgr 书籍管理 Cell_RecoredMgr 借阅记录…

FC-13A(用于汽车应用的kHz范围晶体单元,低轮廓贴片)

FC-13A晶体非常适合用在汽车导航系统设计中的应用&#xff0c;是一种具有优异的频率性能和AEC-Q200标准认证的汽车工业级高精度晶体,FC-13A是一款尺寸为3.2 1.5 0.9mm&#xff0c;频率范围32.768KHz耐高温晶振&#xff0c;频率温度系数仅为-0.04ppm/℃&#xff0c;并且其老化…

2023年四川网信人才技能大赛 决赛 实操赛Web ezbbs Writeup

题目是一个BSS论坛&#xff0c;如图 尝试注册发现注册未开放 题目给了jar包以及给了一个提示条件竞争绕过&#xff0c;分析源码&#xff1a; /register、/login接口都在com.my.bbs.controller.rest.BBSUserController 首先cacheUser是BBSUser类型的私有属性&#xff0c;并且reg…

【Java】智慧工地系统:让建筑行业管理更简单

概述 智慧工地管理平台面向房建、能源、交通各类工地的管理者&#xff0c;通过AI视频、物联感知技术对工地场景中的施工机械、建筑材料、施工规范、施工环境监管、完善施工现场项目管控。实现项目管控、特种设备管理、绿色施工、工地巡检等业务功能&#xff0c;沉淀工地监管数…