Android View 调用基础 通用属性基础 方法场景说明

调用基础

  • 一般常用的方法和属性说明一下情况
    • 1.坐标系
      • `getX`和`getY` 相对于父布局
      • `getTranslationX`和`getTranslationY` 偏移量
      • `getRawX`和`getRawY` 相对于屏幕原点
    • 2.`margin`
    • 3.`setTag` 存储额外的数据
  • 我都有哪些场景需要使用 简单记录下
    • 1.更新所有Viewgroup下的View

一般常用的方法和属性说明一下情况

1.坐标系

getXgetY 相对于父布局

  1. 含义

    • getX和getY的定义:在Android的视图(View)系统中,getXgetYView类的方法。getX返回的是视图左上角相对于其直接触摸事件源(通常是父视图)的原始触摸点的x坐标,getY返回的是视图左上角相对于其直接触摸事件源的原始触摸点的y坐标。这些坐标是在触摸事件处理过程中,用于确定触摸位置与视图位置关系的重要属性。
    • 与其他坐标系统的区别:需要注意的是,getXgetY与视图的布局坐标(lefttop等)有所不同。布局坐标是视图在布局容器(ViewGroup)中的位置,而getXgetY是基于触摸事件的相对坐标,它们反映了触摸操作在视图上的具体位置,并且会随着触摸动作(如拖动)而动态变化。
  2. 使用场景

    • 触摸事件处理

      • 拖动视图:在实现可拖动视图(如自定义的悬浮窗或者可拖动的图标)时,getXgetY可以用于跟踪用户手指在屏幕上的移动,从而相应地移动视图。例如,在一个自定义视图类中,可以重写onTouchEvent方法来实现拖动功能。
      • 代码示例:
      public class DraggableView extends View {private float initialX;private float initialY;public DraggableView(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:initialX = getX() - event.getRawX();initialY = getY() - event.getRawY();break;case MotionEvent.ACTION_MOVE:float newX = event.getRawX() + initialX;float newY = event.getRawY() + initialY;setX(newX);setY(newY);break;case MotionEvent.ACTION_UP:// 可以在这里添加拖动结束后的逻辑,比如吸附到某个位置等break;}return true;}
      }
      
      • 在这个例子中,当用户按下(ACTION_DOWN)时,记录下视图初始位置与触摸点的偏移量。在移动(ACTION_MOVE)阶段,根据触摸点的实时位置(event.getRawXevent.getRawY)和偏移量来计算视图的新位置,通过setXsetY设置视图位置,从而实现拖动效果。
    • 手势识别和交互

      • 判断触摸位置是否在视图特定区域内:用于判断用户的触摸操作是否在视图的某个特定区域(如按钮的有效点击区域、自定义视图中的功能区域)。例如,在一个包含多个可点击区域的自定义绘图视图中,可以通过getXgetY来确定用户是否点击了特定的图形元素。
      • 代码示例:
      public class CustomDrawingView extends View {// 假设这里有一个绘制圆形的方法drawCircle,圆心坐标为(cx, cy),半径为rprivate void drawCircle(Canvas canvas, float cx, float cy, float r) {// 绘制圆形的代码}@Overridepublic boolean onTouchEvent(MotionEvent event) {float touchX = getX();float touchY = getY();if (event.getAction() == MotionEvent.ACTION_DOWN) {// 检查是否点击在圆形区域内if ((touchX - cx) * (touchX - cx) + (touchY - cy) * (touchY - cy) <= r * r) {// 执行圆形区域被点击后的逻辑,比如触发动画或者执行某个功能performCircleClickAction();}}return true;}
      }
      
      • 在这里,通过getXgetY获取触摸位置,与圆形的中心坐标和半径进行比较,判断触摸点是否在圆形内部,从而实现对特定区域触摸事件的识别和相应的逻辑处理。

getTranslationXgetTranslationY 偏移量

  1. 含义

    • 定义:在Android视图系统中,getTranslationXgetTranslationY是用于获取视图在x轴和y轴方向上的平移量的方法。这些平移量是在视图的原始布局位置基础上进行的额外偏移,它们可以通过代码动态地设置,用于实现视图的动画效果、位置微调等功能。
    • 与布局位置的关系:视图的最终显示位置是由其原始布局位置(由布局参数确定的lefttop等属性)加上平移量(translationXtranslationY)来确定的。例如,一个视图的原始left属性为100px,translationX为20px,那么它实际显示的x轴位置是120px。
  2. 用途和场景

    • 动画效果实现
      • 平移动画:可以通过动态改变translationXtranslationY的值来创建视图的平移动画效果。例如,使用属性动画(ValueAnimator)来在一段时间内平滑地移动视图。
      • 代码示例:
      public class MainActivity extends AppCompatActivity {private View viewToAnimate;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewToAnimate = findViewById(R.id.view_to_animate);// 创建一个属性动画,在1秒内将视图在x轴方向平移100pxValueAnimator animator = ValueAnimator.ofFloat(0f, 100f);animator.setDuration(1000);animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float translationX = (float) animation.getAnimatedValue();viewToAnimate.setTranslationX(translationX);}});animator.start();}
      }
      
      • 在这个例子中,通过ValueAnimator来产生一个从0到100的浮点数序列,在动画更新监听器中,获取当前动画值并将其设置为视图的translationX,从而实现视图在x轴方向的平移动画。通过getTranslationX,可以在动画过程中获取视图当前的平移位置,用于其他逻辑判断或者与其他视图的交互。
    • 位置微调与布局补偿
      • 视图对齐和间距调整:在一些复杂的布局中,当需要对视图的位置进行微调,以实现更精确的对齐或者间距控制时,可以使用translationXtranslationY。例如,在一个相对布局(RelativeLayout)中,已经通过布局参数大致确定了视图的位置,但需要在某些情况下(如不同屏幕分辨率或者设备方向下)对视图之间的间距进行微调。
      • 代码示例:
      public class CustomRelativeLayout extends RelativeLayout {public CustomRelativeLayout(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b);// 假设需要微调某个子视图的位置View childView = findViewById(R.id.child_view);int offsetX = 10; // 假设x轴方向需要偏移10pxchildView.setTranslationX(offsetX);}
      }
      
      • 在这里,在onLayout方法中获取子视图,并通过设置translationX来对其位置进行微调,使子视图在布局基础上向右偏移10px。getTranslationX可以用于在后续的布局更新或者其他逻辑中获取这个微调后的位置信息,以确保布局的一致性和正确性。
    • 触摸事件和手势交互中的位置处理
      • 跟随手指移动并恢复位置:在触摸事件处理中,结合getTranslationXgetTranslationY可以实现一些特殊的交互效果。例如,当用户触摸并拖动视图时,视图可以跟随手指移动,并且在手指抬起后,视图可以根据一定的规则恢复到原始位置或者其他指定位置。
      • 代码示例:
      public class InteractiveView extends View {private float startTranslationX;private float startTranslationY;public InteractiveView(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startTranslationX = getTranslationX();startTranslationY = getTranslationY();break;case MotionEvent.ACTION_MOVE:float deltaX = event.getRawX() - getWidth() / 2;float deltaY = event.getRawY() - getHeight() / 2;setTranslationX(startTranslationX + deltaX);setTranslationY(startTranslationY + deltaY);break;case MotionEvent.ACTION_UP:// 恢复到原始位置setTranslationX(0);setTranslationY(0);break;}return true;}
      }
      
      • 在这个例子中,当用户按下(ACTION_DOWN)时,记录视图初始的平移量。在移动(ACTION_MOVE)过程中,根据手指位置的变化计算并设置新的平移量,使视图跟随手指移动。当手指抬起(ACTION_UP)时,将视图的平移量恢复为0,使视图回到原始位置。getTranslationXgetTranslationY在这个过程中用于获取和设置视图的平移位置,实现了触摸交互效果。

getRawXgetRawY 相对于屏幕原点

  1. 含义

    • 定义:在Android的触摸事件处理中,getRawXgetRawYMotionEvent类中的方法。getRawX返回的是触摸点相对于整个屏幕(包括系统状态栏等)的x轴坐标,getRawY返回的是触摸点相对于整个屏幕的y轴坐标。这两个坐标值提供了触摸事件在屏幕全局坐标系中的位置信息。
  2. 用途和场景

    • 实现绝对位置相关的操作

      • 全屏幕范围的触摸交互:在开发需要考虑整个屏幕范围触摸交互的功能时,getRawXgetRawY非常有用。例如,在实现一个可以在屏幕任何位置响应的全局手势操作(如从屏幕边缘滑动调出侧边栏)或者全局悬浮窗的拖放操作时,需要使用这些坐标来获取触摸点在屏幕上的真实位置。
      • 代码示例:
      public class GlobalGestureView extends View {private float initialRawX;private float initialRawY;public GlobalGestureView(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:initialRawX = event.getRawX();initialRawY = event.getRawY();break;case MotionEvent.ACTION_MOVE:float deltaRawX = event.getRawX() - initialRawX;float deltaRawY = event.getRawY() - initialRawY;// 根据触摸点在屏幕上的绝对移动距离来执行操作,比如移动悬浮窗moveFloatingWindow(deltaRawX, deltaRawY);break;case MotionEvent.ACTION_UP:// 触摸结束后的操作,比如判断是否满足手势条件if (checkGesture(event.getRawX(), event.getRawY())) {performGestureAction();}break;}return true;}
      }
      
      • 在这个例子中,onTouchEvent方法通过getRawXgetRawY获取触摸点在屏幕上的绝对位置。在ACTION_DOWN阶段记录初始位置,在ACTION_MOVE阶段计算触摸点的绝对移动距离来移动悬浮窗,在ACTION_UP阶段根据最终的绝对位置判断是否满足某个手势条件,从而执行相应的手势操作。
    • 跨视图边界的交互计算

      • 计算多个视图之间的触摸路径:当一个触摸事件涉及多个视图或者需要跨越视图边界进行交互计算时,getRawXgetRawY能够提供统一的屏幕坐标系来准确描述触摸路径。例如,在一个包含多个可拖动子视图的容器视图中,需要计算从一个子视图拖动到另一个子视图的完整触摸路径。
      • 代码示例:
      public class MultiViewContainer extends ViewGroup {public MultiViewContainer(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {// 布局子视图的代码}@Overridepublic boolean onTouchEvent(MotionEvent event) {int action = event.getAction();switch (action) {case MotionEvent.ACTION_DOWN:// 找到被触摸的子视图View touchedView = findTouchedView(event.getRawX(), event.getRawY());if (touchedView!= null) {// 记录触摸开始的绝对位置initialRawX = event.getRawX();initialRawY = event.getRawY();}break;case MotionEvent.ACTION_MOVE:// 可以根据触摸点的绝对位置来更新子视图的位置或者执行其他跨视图的交互逻辑updateViewsBasedOnRawPosition(event.getRawX(), event.getRawY());break;case MotionEvent.ACTION_UP:// 确定触摸结束的绝对位置,判断是否完成了跨视图的交互,比如将一个子视图拖到另一个位置endTouchInteraction(event.getRawX(), event.getRawY());break;}return true;}
      }
      
      • 在这个ViewGroup示例中,通过getRawXgetRawYonTouchEvent方法中处理触摸事件。在ACTION_DOWN时找到被触摸的子视图并记录触摸开始的绝对位置,在ACTION_MOVE时根据触摸点的绝对位置更新子视图或者执行跨视图交互逻辑,在ACTION_UP时根据触摸结束的绝对位置判断是否完成了跨视图的交互,如拖放操作。这种方式能够准确地处理跨越不同子视图边界的触摸交互,因为getRawXgetRawY提供的是基于整个屏幕的统一坐标。

2.margin

  1. View的margin属性说明

    • leftMargin、topMargin、rightMargin、bottomMargin
      • 这四个属性分别用于设置视图(View)相对于父视图(ViewGroup)的左、上、右、下边缘的外边距。例如,leftMargin定义了视图左边与父视图左边之间的距离,topMargin定义了视图上边与父视图上边之间的距离。这些外边距决定了视图在父视图中的位置,通过调整它们可以控制视图之间的间距。
    • startMargin和endMargin
      • 这两个属性是为了支持布局方向(layoutDirection)而引入的。在从左到右(LTR)的布局方向下,startMargin等同于leftMarginendMargin等同于rightMargin。然而,在从右到左(RTL)的布局方向下,startMargin代表视图右边与父视图右边的距离,endMargin代表视图左边与父视图左边的距离。这使得布局在不同语言和阅读习惯(如阿拉伯语等从右到左的语言)下能够正确地显示视图的位置。
  2. 动态更新margin的方法

    • 使用LayoutParams(适用于ViewGroup的子视图)
      • 获取当前的LayoutParams:首先需要获取视图当前的布局参数(LayoutParams)。对于大多数ViewGroup的子视图,可以通过getLayoutParams方法来获取。例如,对于一个在LinearLayout中的视图:
      LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) view.getLayoutParams();
      
      • 更新margin属性:获取布局参数后,可以修改其中的外边距属性。例如,要增加视图的左边距:
      layoutParams.leftMargin += 10;
      
      • 应用更新后的LayoutParams:最后,将更新后的布局参数重新设置给视图,使外边距的改变生效:
      view.setLayoutParams(layoutParams);
      
    • 使用MarginLayoutParams(更通用的方式)
      • 获取MarginLayoutParams:如果不确定视图所在的ViewGroup类型,或者想要更通用的方式来更新外边距,可以使用MarginLayoutParams。首先,需要根据视图的父视图类型来获取正确的MarginLayoutParams。如果父视图是ViewGroup的子类,可以通过以下方式获取:
      ViewGroup.MarginLayoutParams marginLayoutParams;
      if (view.getParent() instanceof ViewGroup) {marginLayoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
      }
      
      • 修改margin属性:和前面一样,可以修改外边距属性。例如,要同时更新上下外边距:
      marginLayoutParams.topMargin = 20;
      marginLayoutParams.bottomMargin = 20;
      
      • 重新应用布局参数:将更新后的布局参数设置回视图:
      view.setLayoutParams(marginLayoutParams);
      
    • 注意事项
      • 不同的ViewGroup可能对布局参数有不同的要求和限制。例如,RelativeLayout的布局参数(RelativeLayout.LayoutParams)可能会有一些与相对位置相关的属性,在更新外边距时需要考虑这些因素,以免影响其他布局属性。
      • 在动态更新外边距时,可能会触发视图的重新布局(requestLayout)。这是因为外边距的改变会影响视图在父视图中的位置和大小(间接影响布局),所以需要注意性能问题,避免在不必要的时候频繁更新外边距。

3.setTag 存储额外的数据

  1. 用途

    • 存储视图相关的额外数据setTag方法主要用于在视图(View)对象中存储额外的数据。这个数据可以是任何类型的对象,例如一个整数、字符串、自定义的数据结构或者业务对象等。通过给视图设置标签(tag),可以方便地在后续的代码中(特别是在处理视图的事件回调或者遍历视图层次结构时)获取这些关联的数据,而不需要使用额外的变量或者复杂的查找机制来跟踪这些与视图相关的数据。
    • 辅助视图的识别和操作:它可以作为一种简单的标识符来区分不同的视图或者同一类型视图的不同状态。例如,在一个列表视图(RecyclerViewListView)中,可以为每个列表项视图设置一个唯一的标签来表示该项的内容类型、优先级或者其他自定义属性,从而在处理列表项的点击事件或者其他交互操作时,能够快速地根据标签来执行相应的逻辑。
  2. 使用场景

    • 在列表视图中存储数据相关信息

      • RecyclerView或ListView:在RecyclerView的适配器(Adapter)中,当创建视图持有者(ViewHolder)时,可以使用setTag来存储与列表项相关的数据。例如,在一个新闻列表应用中,每个新闻列表项包含标题、内容摘要、发布时间等信息。
      • 代码示例:
      public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {private List<NewsArticle> newsArticles;public NewsAdapter(List<NewsArticle> newsArticles) {this.newsArticles = newsArticles;}@Overridepublic NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item_layout, parent, false);return new NewsViewHolder(view);}@Overridepublic void onBindViewHolder(NewsViewHolder holder, int position) {NewsArticle article = newsArticles.get(position);holder.titleTextView.setText(article.getTitle());holder.summaryTextView.setText(article.getSummary());// 将新闻文章对象设置为视图的标签holder.itemView.setTag(article);}class NewsViewHolder extends RecyclerView.ViewHolder {TextView titleTextView;TextView summaryTextView;NewsViewHolder(View itemView) {super(itemView);titleTextView = itemView.findViewById(R.id.titleTextView);summaryTextView = itemView.findViewById(R.id.summaryTextView);}}
      }
      
      • 在这个例子中,在onBindViewHolder方法中,将NewsArticle对象设置为列表项视图的标签。这样,在处理列表项的点击事件时,可以通过getTag方法获取对应的新闻文章对象,进而获取文章的详细内容并进行展示或者其他操作。
    • 在视图层次结构中传递数据和状态

      • 复杂布局中的视图交互:在一个包含多个嵌套视图的复杂布局中,当从一个视图触发事件,需要将相关的数据传递给其他相关视图时,可以使用setTag。例如,在一个包含标题视图、内容视图和操作按钮的布局中,当点击操作按钮时,需要根据标题视图中的某些信息来更新内容视图。
      • 代码示例:
      public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);View titleView = findViewById(R.id.title_view);View contentView = findViewById(R.id.content_view);Button actionButton = findViewById(R.id.action_button);// 设置标题视图的标签为一个包含标题信息的字符串titleView.setTag("初始标题");actionButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String title = (String) titleView.getTag();// 根据标题信息更新内容视图contentView.setTag(title + " - 已更新");// 可以在这里进行其他更新内容视图显示的操作,比如更新文本等}});}
      }
      
      • 在这个例子中,通过setTag将标题信息存储在标题视图中。当点击操作按钮时,获取标题视图的标签信息,并将更新后的信息存储在内容视图的标签中。这样就实现了在视图层次结构中的数据传递,并且可以根据这些标签信息来执行相应的视图更新操作。
    • 临时存储视图的状态或配置信息

      • 视图的复用和状态恢复:在一些需要复用视图的场景中,比如在视图的缓存机制或者配置改变(如屏幕旋转)后的状态恢复场景下,可以使用setTag来存储视图的当前状态信息。例如,在一个包含可编辑文本框的自定义视图中,当屏幕旋转时,需要保存文本框中的输入内容。
      • 代码示例:
      public class CustomEditText extends EditText {public CustomEditText(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onSaveInstanceState(Parcelable state) {Bundle bundle = new Bundle();// 将文本框中的文本内容存储为标签bundle.putString("text_content", getText().toString());bundle.putParcelable("super_state", state);state = bundle;super.onSaveInstanceState(state);}@Overrideprotected void onRestoreInstanceState(Parcelable state) {if (state instanceof Bundle) {Bundle bundle = (Bundle) state;// 从标签中获取文本内容并设置给文本框String textContent = bundle.getString("text_content");setText(textContent);state = bundle.getParcelable("super_state");}super.onRestoreInstanceState(state);}
      }
      
      • 在这个例子中,在onSaveInstanceState方法中,将文本框中的文本内容存储在一个Bundle中,并将其作为视图的状态(通过setTag的类似原理,在内部实现)保存起来。在onRestoreInstanceState方法中,从保存的状态中获取文本内容并设置回文本框,从而实现了视图状态在配置改变后的恢复。虽然这不是直接使用setTag方法,但原理类似,都是用于存储和恢复视图相关的数据。

我都有哪些场景需要使用 简单记录下

1.更新所有Viewgroup下的View

public void traverseViewGroup(ViewGroup viewGroup) {int childCount = viewGroup.getChildCount();for (int i = 0; i < childCount; i++) {View childView = viewGroup.getChildAt(i);if (childView instanceof ViewGroup) {traverseViewGroup((ViewGroup) childView);} else {// 处理子 Viewif (childView instanceof TextView) {// 如果是 TextView,执行特定操作TextView textView = (TextView) childView;textView.setText("Hello");}}}
}

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

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

相关文章

从零到一:利用 AI 开发 iOS App 《震感》的编程之旅

在网上看到一篇关于使用AI开发的编程经历&#xff0c;分享给大家 作者是如何在没有 iOS 开发经验的情况下&#xff0c;借助 AI&#xff08;如 Claude 3 模型&#xff09;成功开发并发布《震感》iOS 应用。 正文开始 2022 年 11 月&#xff0c;ChatGPT 诞生并迅速引发全球关注。…

.netcore + postgis 保存地图围栏数据

一、数据库字段 字段类型选择(Type) 设置对象类型为&#xff1a;geometry 二、前端传递的Json格式转换 前端传递围栏的各个坐标点数据如下&#xff1a; {"AreaRange": [{"lat": 30.123456,"lng": 120.123456},{"lat": 30.123456…

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签&#xff1a; 6 年多头部大厂软件开发经验&#xff1b;1 年多 AI 业务应用经验&#xff0c;拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI&#xff0c;已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…

k8clone二进制工具迁移k8s中的无状态应用

1 概述 k8clone是一个简便的Kubernetes元数据克隆工具&#xff0c;它可以将Kubernetes元数据&#xff08;对象&#xff09;保存为本地压缩包&#xff0c;在恢复时可将这些元数据恢复到目标集群中&#xff08;已存在的资源不会被覆盖&#xff09;。它不依赖远程存储&#xff0c…

IDC 报告:百度智能云 VectorDB 优势数量 TOP 1

近日&#xff0c;IDC 发布了《RAG 与向量数据库市场前景预测》报告&#xff0c;深入剖析了检索增强生成&#xff08;RAG&#xff09;技术和向量数据库市场的发展趋势。报告不仅绘制了 RAG 技术的发展蓝图&#xff0c;还评估了市场上的主要厂商。在这一评估中&#xff0c;百度智…

计算机毕业设计Python+CNN卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Nginx SSL+tomcat,使用request.getScheme() 取到https协议

架构上使用了 Nginx tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https和http协议。 发现 request.getScheme() //总是 http&#xff0c;而不是实际的http或https request.isSecure() //总是false&#xff08;因为总是http&#xff09; request.getRemoteAddr(…

机器学习 ---线性回归

目录 摘要&#xff1a; 一、简单线性回归与多元线性回归 1、简单线性回归 2、多元线性回归 3、残差 二、线性回归的正规方程解 1、线性回归训练流程 2、线性回归的正规方程解 &#xff08;1&#xff09;适用场景 &#xff08;2&#xff09;正规方程解的公式 三、衡量…

蓝桥杯c++算法学习【3】之思维与贪心(重复字符串、翻硬币、乘积最大、皮亚诺曲线距离【难】:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 思维与贪心 一、重复字符串 【问题描述】 如果一个字符串S恰好可以由某个字符串重复K次得到&#xff0c;我们就称S是K次重复字 符串…

Vue3 -- 基于Vue3+TS+Vite项目【项目搭建及初始化】

兼容性注意&#xff1a; Vite 需要 Node.js 版本 18 或 20。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。【摘抄自vite官网】 这里我用的node版本是 v18.20.2 创建项目&#xf…

计算机网络中的域名系统(DNS)及其优化技术

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机网络中的域名系统&#xff08;DNS&#xff09;及其优化技术 计算机网络中的域名系统&#xff08;DNS&#xff09;及其优化…

STM32单片机CAN总线汽车线路通断检测

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着汽车电子技术的不断发展&#xff0c;车辆通信接口在汽车电子控…

(实战)WebApi第13讲:怎么把不同表里的东西,包括同一个表里面不同的列设置成不同的实体,所有的给整合到一起?【前端+后端】、前端中点击标签后在界面中显示

一、实现全局跨域&#xff1a;新建一个Controller&#xff0c;其它的controller都继承它 1、新建BaseController 2、在后端配置&#xff0c;此处省略【详情见第12讲四、3、】 3、其它的控制器继承BaseController&#xff0c;这个时候就能够完成全局的跨域 【向后台传cookie和…

前缀和技巧解析

前缀和技巧解析 前缀和&#xff08;Prefix Sum&#xff09;是一种常用的算法技巧&#xff0c;用于高效地处理一系列连续子数组和的问题。通过构建一个额外的数组来存储从数组起始位置到当前位置的累计和&#xff0c;可以在常数时间内快速计算任意区间的和。 前缀和应用的典型…

Mysql每日一题(行程与用户,困难※)

今天给大家分享一个截止到目前位置&#xff0c;我遇到最难的一道mysql题目&#xff0c;非常建议大家亲手做一遍 完整代码如下&#xff0c;这道题的主要难点是它有两个外键&#xff0c;以前没遇到过&#xff0c;我也没当回事&#xff0c;分享一下错误经验哈 当时我写的where判断…

已解决:spark代码中sqlContext.createDataframe空指针异常

这段代码是使用local模式运行spark代码。但是在获取了spark.sqlContext之后&#xff0c;用sqlContext将rdd算子转换为Dataframe的时候报错空指针异常 Exception in thread "main" org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.Nu…

cooladmin 后端 查询记录

查询记录&#xff1a;pageQueryOp中列表查询的group by node ts controller代码如下 import { CoolController, BaseController } from cool-midway/core; import { Inject, Post, Get, Param } from midwayjs/decorator; import { ComparePricesPlanInfoEntity } from ../../…

cesium 3DTiles之pnts格式详解

Point Cloud 1 概述 点云&#xff08;Point Cloud&#xff09;瓦片格式用于高效流式传输大规模点云数据&#xff0c;常用于 3D 可视化中。每个点由位置&#xff08;Position&#xff09;和可选的属性定义&#xff0c;这些属性用来描述点的外观&#xff08;如颜色、法线等&…

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用&#xff1a;指程序在执行时&#xff0c;调用方需要等待函数调用返回结果后&#xff0c;才能继续执行下一步操作&#xff0c;是一种阻塞式调用。 异步调用&#xff1a;指程序在执行时&#xff0c;调用方在调用函数后立…

ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决

系列文章 ESLint 使用教程&#xff08;一&#xff09;&#xff1a;从零配置 ESLint ESLint 使用教程&#xff08;二&#xff09;&#xff1a;一步步教你编写 Eslint 自定义规则 ESLint 使用教程&#xff08;三&#xff09;&#xff1a;12个ESLint 配置项功能与使用方式详解 ES…