移动网站开发工具网站权限怎么设置方法

news/2025/10/3 19:21:48/文章来源:
移动网站开发工具,网站权限怎么设置方法,西安网站制作网站,网络空间安全专业大学排名本篇主要讲Animation 和 Property Animation的使用#xff0c;最后会讲QQ管家桌面火箭作为例子#xff1a; 在Android中开发动效有两套框架可以使用#xff0c;分别为 Animation 和 Property Animation#xff1b; 相对来说#xff0c;Animator比Animation要强大太多最后会讲QQ管家桌面火箭作为例子 在Android中开发动效有两套框架可以使用分别为 Animation 和 Property Animation 相对来说Animator比Animation要强大太多两者之间的主要区别在于 区别一需要的Anroid API level不一样 Property Animation需要Android API level 11的支持,当然可以使用nineoldandroids.jar进行兼容而View Animation则是最原始的版本。区别二适用范围不一样 Property Animation适用于所有的Object对象而View Animation则只能应用于View对象。区别三实际改变不一样 Animation改变的是view的绘制位置而非实际属性 Property Animation改变的是view的实际属性 如用两套框架分别对一个button做位移动画用animation处理之后的点击响应会在原处而用Property Animation处理后的点击响应会在最终位置处 一Animation 总的来说可以分为Tween Animation补间动画 和Frame Animation帧动画 帧动画Frame Animation 帧动画其实就是按照一定的时间间隔进行快速的图片切换达到视觉上的动画效果这种动画相对来说缺点较多比如 1.根据动画的复杂度需要切多张图这样就不可避免的增大了包大小 2.由于是多张图运行时需要加载到内存那么又会增大运行时的内存大小 所以如果在动效上有别的方案选择个人不太建议使用帧动画的实现方式当然有时候不得不用这时我们可以尽可能的在效果连贯的基础上减少图片张数 帧动画的实现也相对简单就举一个例子但是例子之中有几条帧动画的使用规则是我以前在使用的过程中遇到问题后总结出来的 1.在drawable目录下xml中定义如下文件节点为animation-listoneshot代表是否执行一次duration代表每张图对应展示时间 animation-list xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:oneshottrueitem android:drawabledrawable/rocket_thrust1 android:duration200 /item android:drawabledrawable/rocket_thrust2 android:duration200 /item android:drawabledrawable/rocket_thrust3 android:duration200 / /animation-list 2.然后将该drawable设置给对应的imageview 3.在activity中 animDrawable (AnimationDrawable) imageView.getBackground(); 4.在onWindowFocusChanged()中调用 animDrawable.stop(); animDrawable.start(); 如果不这么做那么在性能比较差的机器上很可能就会出现没有播放的情况因为只显示出了第一帧问题在于动画没有和view完成关联所以不要在onCreate中去调用启动而需要在onWindowFocusChanged中进行调用 在极特殊的情况下如果还无法播放则可以mHandler.postDelay 200 毫秒作为终极杀手锏当然只要按照我上面的步骤应该不会出现问题 好了帧动画最大的问题是按照上面的步骤开发接下来看补间动画Tween Animation 补间动画Tween Animation Animation下有五个子类AlphaAnimation(渐变),RotateAnimation(旋转),ScaleAnimation(缩放),TranslateAnimation(位移) 在实现原理上除了AlphaAnimation是动态的去改变view的alpha值其他三个都是去改变里面的Matrix矩阵后面会专门讲 在Animation框架里主要的类主要有Animation和Transformation、Interpolator(插值器后面也会专门讲) Transformation里面主要对alpha和matrix进行了封装而改变view的透明度就是改变alpha移动、旋转、缩放甚至错切则都是改变matrix Animation里有一个重要的方法applyTransformation实现自定义Animation也主要是实现这个方法 以AlphaAnimation为例 /*** Changes the alpha property of the supplied {link Transformation}*/Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {final float alpha mFromAlpha;t.setAlpha(alpha ((mToAlpha - alpha) * interpolatedTime));} 渐变动画只需要在里面根据当前的interpolatedTime(已经由插值器转换后的值)动态计算出对应的alpha重新设置到Transformation中即可 Animation的使用也相对比较简单可以通过xml配置也可以通过代码生成 1.xml配置 ?xml version1.0 encodingutf-8? set xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:shareInterpolatorfalse scale!-- 单次运行时间 --android:duration500!-- 运行完成后是否保持结束时的状态 --android:fillAftertrue!-- 运行完成后是否回到开始时的状态 --android:fillBeforefalse!-- 初始时大小1代表原大小0代表无 --android:fromXScale1android:fromYScale1!-- 使用的插值器控制运行过程中的速率 --android:interpolatorandroid:anim/accelerate_interpolator!-- 相对中心点50%代表自身中心50%p代表相对父view的中心 --android:pivotX50%android:pivotY50%!-- 重复的次数infinite代表永久循环 --android:repeatCountinfinite!-- 重复的模式 restart代表重新开始reverse代表反转--android:repeatModerestart!-- 延迟多久后开始 --android:startOffset100!-- 要到达的缩放比例 --android:toXScale0android:toYScale0 //scaletranslateandroid:duration550!-- 相对当前位置的像素距离 --android:fromYDelta300android:interpolatorandroid:anim/accelerate_interpolatorandroid:toYDelta0 /alphaandroid:duration550android:fromAlpha0android:toAlpha1 //set 当要多个效果同时使用时则如上使用set标签进行组合在代码中使用如下 Animation animation AnimationUtils.loadAnimation(getApplicationContext(), R.anim.app_clean_animation); view.startAnimation(animation); 2.纯代码生成// false代表里面的子animation不共用一个插值器AnimationSet animationSet new AnimationSet(false);// 从alpha 完全透明变为完全不透明AlphaAnimation alphaAnimation new AlphaAnimation(0, 1);alphaAnimation.setDuration(500);alphaAnimation.setFillAfter(true);// 运行完成后是否回到开始时的状态alphaAnimation.setFillBefore(false);alphaAnimation.setInterpolator(new AccelerateInterpolator());// 重复的次数infinite代表永久循环alphaAnimation.setRepeatCount(Animation.INFINITE);// 重复的模式 restart代表重新开始reverse代表反转alphaAnimation.setRepeatMode(Animation.RESTART);// 给动画设置对应的监听可以在动画开始、结束或重复执行时做对应操作alphaAnimation.setAnimationListener(new AnimationListener() {Overridepublic void onAnimationStart(Animation animation) {//开始时候回调}Overridepublic void onAnimationRepeat(Animation animation) {//重复执行时回调}Overridepublic void onAnimationEnd(Animation animation) {//一轮结束时回调}});RotateAnimation rotateAnimation new RotateAnimation(0, 360);rotateAnimation.setDuration(500);animationSet.addAnimation(alphaAnimation);animationSet.addAnimation(rotateAnimation);view.startAnimation(animationSet); 好了animation就讲到这里上面的注释应该比较详尽了主要是弄清楚其使用方式和使用场景 二Property Animation属性动画 属性动画它更改的是对象的实际属性在View AnimationTween Animation中其改变的是View的绘制效果真正的View的属性保持不变比如无论你在对话中如何缩放Button的大小Button的有效点击区域还是没有应用动画时的区域其位置与大小都不变。而在Property Animation中改变的是对象的实际属性如Button的缩放Button的位置与大小属性值都改变了。而且Property Animation不止可以应用于View还可以应用于任何对象。Property Animation只是表示一个值在一段时间内的改变当值改变时要做什么事情完全是你自己决定的。 在Property Animation中可以对动画应用以下属性 1.TimeInterpolator(插值器和低版本的Interpolator一样)属性值的计算方式如先快后慢 2.TypeEvaluator根据属性的开始、结束值与TimeInterpolator计算出的因子计算出当前时间的属性值 3.Repeat Count and behavoir重复次数与方式如播放3次、5次、无限循环可以此动画一直重复或播放完时再反向播放 4.Animation sets动画集合即可以同时对一个对象应用几个动画这些动画可以同时播放也可以对不同动画设置不同开始偏移 5.Frame refreash delay多少时间刷新一次即每隔多少时间计算一次属性值默认为10ms最终刷新时间还受系统进程调度与硬件的影响 上面都是些概念但这些东西不必刻意去记或去理解插值器这样的比较生涩的概念我们只需要使用他最实用的部分并熟悉动画的实现套路 所以对于属性动画主要带大家熟悉两个类ValueAnimator和ObjectAnimator,通过这两个类我们平常遇到的动效大部分都能够加以解决 1.ValueAnimator ValueAnimator包含了 Property Animation 动画的所有核心功能如动画时间开始、结束属性值相应时间属性值计算方法等。 在我看来使用 ValueAnimator 只是为我们创建了一个过程我们可以用ValueAnimator.ofXXX()进行创建然后通过各种setXXX()给其设定过程的时间速率变化效果等然后通过addUpdateListener()中去拿这个过程中回调回来的中间值然后使用这些中间值改变view的属性形成动态效果 上面这句话通过代码表现如下 比如我们使用 ValueAnimator 在2S内将view横向拉长为2倍纵向压缩为0 // 在2S内将view横向拉长为2倍纵向压缩为0// 创建01的一个过程,任何复杂的过程都可以采用归一化然后在addUpdateListener回调里去做自己想要的变化ValueAnimator valueAnimator ValueAnimator.ofFloat(0, 1);// 设置过程的时间为2SvalueAnimator.setDuration(SCALE_ANIM_TIME);// 设置这个过程是速度不断变快的valueAnimator.setInterpolator(new AccelerateInterpolator());// 这个过程中不断执行的回调valueAnimator.addUpdateListener(new AnimatorUpdateListener() {Overridepublic void onAnimationUpdate(ValueAnimator animation) {// 不断回调的在0-1这个范围内经过插值器插值之后的返回值float value (Float) animation.getAnimatedValue();// ViewHelper可直接用于修改view属性// 将宽在2S内放大一倍ViewHelper.setScaleX(mTestImage, 1 value);// 将高在2S内压缩为0ViewHelper.setScaleY(mTestImage, 1 - value);}});// AnimatorListenerAdapter是AnimatorListener的空实现根据需要覆盖的方法自行选择valueAnimator.addListener(new AnimatorListenerAdapter() {Overridepublic void onAnimationStart(Animator animation) {super.onAnimationStart(animation);Toast.makeText(getApplicationContext(), onAnimationStart, Toast.LENGTH_SHORT).show();}Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);Toast.makeText(getApplicationContext(), onAnimationEnd, Toast.LENGTH_SHORT).show();}Overridepublic void onAnimationCancel(Animator animation) {super.onAnimationCancel(animation);}Overridepublic void onAnimationRepeat(Animator animation) {super.onAnimationRepeat(animation);}});valueAnimator.start(); 动画其实就是在一个时间段内不断去改变view的一些属性值这些属性值动态变化不断重绘的过程也就形成了我们所看到的动效 那么基于此我们可以知道这个过程都是通过时间来控制的时间走过的比例肯定在 0-1 之间如果我们直接用这个走过的时间比例去算当前属性值那么整个过程则是匀速线性的 那么在这个基础上我们想我们的过程是非线性的我们该怎么办呢那么只需要对这个时间比例加以加工具体请看下图 横轴就是经过的时间比例肯定是匀速的从0-1纵轴则是时间比例经过加工后的插值这个对应过程则是Interpolator插值器对应的过程 减速线则对应DecelerateInterpolater,因为它的斜率越来越平所以瞬时速度越来越小则形成了减速效果 其他的效果类似目前android里提供的插值器有如下一些 AccelerateInterpolator      加速开始时慢中间加速DecelerateInterpolator       减速开始时快然后减速AccelerateDecelerateInterolator  先加速后减速开始结束时慢中间加速AnticipateInterpolator       反向 先向相反方向改变一段再加速播放AnticipateOvershootInterpolator  反向加回弹先向相反方向改变再加速播放会超出目的值然后缓慢移动至目的值BounceInterpolator        跳跃快到目的值时值会跳跃如目的值100后面的值可能依次为8577708090100CycleIinterpolator         循环动画循环一定次数值的改变为一正弦函数Math.sin(2 * mCycles * Math.PI * input)LinearInterpolator         线性线性均匀改变OvershottInterpolator       回弹最后超出目的值然后缓慢改变到目的值TimeInterpolator         一个接口允许你自定义interpolator以上几个都是实现了这个接口 其实想实现对应的效果其实是找一条曲线对对应条件进行模拟然后根据曲线函数和X值得出每个时间点上对应的Y值插值这也就是插值器原理 2.ObjectAnimator 我们同样还是实现在2S内将view横向拉长为2倍纵向压缩为0 AnimatorSet animatorSet new AnimatorSet();// 将view在x方向上从原大小放大2倍ObjectAnimator scaleXAnimator ObjectAnimator.ofFloat(mTestImage, scaleX, 1, 2);scaleXAnimator.setDuration(SCALE_ANIM_TIME);// 将view在y方向上从原大小压缩为0ObjectAnimator scaleYAnimator ObjectAnimator.ofFloat(mTestImage, scaleY, 1, 0);scaleYAnimator.setDuration(SCALE_ANIM_TIME);// 设置加速模式animatorSet.setInterpolator(new AccelerateInterpolator());// 设置回调当然也可以设置在单独的animator上egscaleXAnimatoranimatorSet.addListener(new AnimatorListenerAdapter() {Overridepublic void onAnimationStart(Animator animation) {super.onAnimationStart(animation);Toast.makeText(getApplicationContext(), onAnimationStart, Toast.LENGTH_SHORT).show();}Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);Toast.makeText(getApplicationContext(), onAnimationEnd, Toast.LENGTH_SHORT).show();}Overridepublic void onAnimationCancel(Animator animation) {super.onAnimationCancel(animation);}Overridepublic void onAnimationRepeat(Animator animation) {super.onAnimationRepeat(animation);}});animatorSet.playTogether(scaleXAnimator, scaleYAnimator);animatorSet.start(); ObjectAnimator 是ValueAnimator 的子类可以直接改变Object的属性目前可供改变的属性主要有 translationX,translationY View相对于原始位置的偏移量rotation,rotationX,rotationY 旋转rotation用于2D旋转角度3D中用到后两个scaleX,scaleY 缩放比x,y View的最终坐标是View的lefttop位置加上translationXtranslationYalpha 透明度 关于Animator主要分享这两个类其他的比如 PropertyValuesHolder 大家可以自己去看 QQ管家桌面悬浮窗动画 分析 1.浮在桌面上的小圆泡可以盖在所有应用之上并且可以独立操作不影响其他操作需要使用WindowManager.addView 2.拖动的时候变成小火箭需要手势处理 onTouch 3.拖动到底部区域的时候震动需要对拖动到的位置做时候判断 4.放手时位置如果在底座区则发射火箭否则变成小圆回到边界 5.火箭喷火效果可以通过两张图帧动画实现也可以采用属性动画实现通过看QQ管家的图应该是采用的帧动画方式 6.底部的底座闪动效果也是三张图的帧动画 MainActivity package com.itheima.rocket;import java.nio.channels.AlreadyConnectedException;import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.widget.ImageView; import android.widget.Toast;public class MainActivity extends Activity {private ImageView iv;private ImageView iv_bottom; private ImageView iv_top;private AnimationDrawable rocketAnimation;private Handler handler new Handler(){public void handleMessage(android.os.Message msg) {int position (Integer) msg.obj ;iv.layout(iv.getLeft(), position, iv.getRight(), positioniv.getHeight());if(position320){iv_top.setVisibility(View.VISIBLE);AlphaAnimation aa new AlphaAnimation(0.6f, 1.0f);aa.setDuration(300);iv_top.startAnimation(aa);}if(position20){AlphaAnimation aa new AlphaAnimation(1.0f, 0.0f);aa.setDuration(300);aa.setFillAfter(true);iv_top.startAnimation(aa);}};};Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv (ImageView) findViewById(R.id.iv);iv.setBackgroundResource(R.drawable.rocket);iv_top (ImageView) findViewById(R.id.iv_top);iv_bottom (ImageView) findViewById(R.id.iv_bottom);rocketAnimation (AnimationDrawable) iv.getBackground();rocketAnimation.start();iv.setOnTouchListener(new OnTouchListener() {int startX;int startY;Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startX (int) event.getRawX();startY (int) event.getRawY();break;case MotionEvent.ACTION_MOVE:int newX (int) event.getRawX();int newY (int) event.getRawY();int dx newX - startX;int dy newY - startY;//wm.updateViewLayout();iv.layout(iv.getLeft()dx, iv.getTop()dy, iv.getRight()dx, iv.getBottom()dy);startX (int) event.getRawX();startY (int) event.getRawY();break;case MotionEvent.ACTION_UP:int top iv.getTop();int left iv.getLeft();int right iv.getRight();if(top300left100right220){Toast.makeText(getApplicationContext(), 发射火箭, 0).show();iv_bottom.setVisibility(View.VISIBLE);AlphaAnimation aa new AlphaAnimation(0.0f, 1.0f);aa.setDuration(500);aa.setRepeatCount(1);aa.setRepeatMode(Animation.REVERSE);aa.setFillAfter(true);iv_bottom.startAnimation(aa);sendRocket();}break;}return true;}});}protected void sendRocket() {new Thread(){public void run() {int start 380;for(int i 0 ;i11;i){try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}//更新一下uiMessage msg Message.obtain();msg.obj 380 - i*38;//计算出火箭的高度handler.sendMessage(msg);}};}.start();} } rocket.xml ?xml version1.0 encodingutf-8? animation-list xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:oneshotfalseitem android:drawabledrawable/desktop_rocket_launch_1 android:duration200 /item android:drawabledrawable/desktop_rocket_launch_2 android:duration200 / /animation-list 布局文件 RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivity ImageViewandroid:idid/ivandroid:layout_width40dipandroid:layout_height73dip /ImageViewandroid:visibilityinvisibleandroid:idid/iv_bottomandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_alignParentBottomtrueandroid:srcdrawable/desktop_smoke_m /ImageViewandroid:visibilityinvisibleandroid:idid/iv_topandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_aboveid/iv_bottomandroid:srcdrawable/desktop_smoke_t //RelativeLayout 源代码下载 源代码 参考链接 Animation Property Animation 使用 - Ajian_studio - 博客频道 - CSDN.NET 【TweenedAnimation】四种动画效果参数详解(自测所得) - 邪天殇 - 博客园 完成

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

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

相关文章

实用指南:洛谷题解——C语言(9.17——9.19)

实用指南:洛谷题解——C语言(9.17——9.19)2025-10-03 19:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

怎样保证网站的安全性网站建设没业务

再谈编译链接 C函数重载与编译链接-CSDN博客 之前我已经写过文章简单介绍了编译链接要做的一些操作。现在为了能更好的理解我们平时的开发环境,我会在Linux系统上完整地走一遍流程。 环境描述 我们使用普通用户在Linux上进行操作,先写一段测试代码。 …

多模态大语言模型OISA - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

微信公众号的网站品牌推广策略有哪几种

几个星期前几个月前,我正在寻找如何为Oracle Cloud项目设计新的REST API。 我计划要做的事情之一就是使用Marc Hadley在Jersey 1.x中创建的声明性链接注入。 可悲的是这并没有被转发移植然而,这样一个快速的聊天项目带动和我承担了使代码最新的小中型工作…

电力网站怎么做随州网站建设便宜

Enum是一个特殊的类. 我们不能以class Xxx extends Enum的方式手动继承, 必须写成enum Xxx的形式; 然而这段枚举类的定义在编译之后又变回了class Xxx extends Enum. 一、类定义 public abstract class Enum<E extends Enum<E>>implements Comparable<E>, …

sk06.【scikit-learn基础】--『监督学习』之决策树 - 教程

sk06.【scikit-learn基础】--『监督学习』之决策树 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

20251001国庆模拟

Part 1 题目列表P7075 [CSP - S2020] 儒略日 P7076 [CSP - S2020] 动物园 P7077 [CSP - S2020] 函数调用 P7078 [CSP - S2020] 贪吃蛇Part 2 考试时间线 8:02 开题, 仅仅读了 10 分钟 T1 题目,就得出结论,大模拟。 …

线段树合并 [POI 2011] ROT-Tree Rotations

波兰人太神秘了,竟能出出来如此题目。 题意 给一棵树(读入不太寻常,这个容易处理,忽略不计), 每个叶子节点有一个权值,我们可以选择交换一些节点的左右子树(保证是二叉树,且要么是叶子要么左右子树都存在)。 …

CSS的选择器 - 指南

CSS的选择器 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…

ModuleNotFoundError: No module named wandb.keras

from wandb.keras import WandbCallback ModuleNotFoundError: No module named wandb.keras ================================ Successfully installed annotated-types-0.7.0 eval-type-backport-0.2.2 gitdb-4.0.1…

wordpress建站网注册公司流程和费用

0 前言 使用stm32官方可视化初始化代码生成工具STM32CubeMX生成的工程GCC编译选项默认不支持非对齐访问&#xff0c;在我们进行非对齐的访问时就会进入数据异常中断DAbt中。为了解决这一问题&#xff0c;我们需要在GCC编译选项中加上一处配置。 1 操作方法 右键STM32CubeIDE…

C# Net9的模块初始化器(Module Initializer)

Module Initializer 是为了让库/框架在程序集加载时,以 “CLR 保证的、只运行一次的、不依赖类型访问的” 方式执行初始化逻辑,从而避免静态构造函数的副作用和性能问题。Module Initializer 是为了让库/框架在程序集…

离线轻量大模型,Ollama部署到docker方法

来自豆包 将Ollama部署到Docker的步骤如下: 一、安装Docker环境启用系统功能(Windows系统):打开“控制面板” → “程序与功能” → “启用或关闭Windows功能”。 勾选 Hyper-V、虚拟机平台、Linux子系统(WSL)。…

flink执行图 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:华为Pura 80芯片细节曝光,预示着华为多款新品即将震撼登场!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

应用拓扑讲义整理 Chapter 6. 单纯复形(Simplicial Complexes)

Chapter 6. 单纯复形 6.1 单纯复形的基本概念 6.1.1 仿射空间 Definition 6.1(仿射空间)仿射空间是一个三元组 \((E, \overrightarrow E, +)\),其中 \(E\) 是点集,\(\overrightarrow E\) 是由自由向量或转移组成的…

完整教程:华为麒麟9010、9020、9030、9040系列芯片的性能参数及其与高通芯片的对比

完整教程:华为麒麟9010、9020、9030、9040系列芯片的性能参数及其与高通芯片的对比pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fo…

AQS(ReentrantLock)源码浅析

管程 — Java同步的设计思想 管程:指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。 互斥:同一时刻只允许一个线程访问共享资源; 同步:线程之间如何通信、协作。 MESA模型 在管程的发展史上,先后出…

做网站app价格多少钱网站首页布局风格

编程笔记 html5&css&js 017 HTML样式 一、HTML样式二、CSS3小结 HTML样式是用来控制网页元素外观的一组属性和值。 一、HTML样式 可以通过以下几种方式来为HTML元素添加样式&#xff1a; 内联样式&#xff1a;直接在HTML元素的style属性中添加样式。例如&#xff1a;…

完整教程:【数据结构】快速排序与归并排序的实现

完整教程:【数据结构】快速排序与归并排序的实现2025-10-03 18:42 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…