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

news2024/11/16 10:59:36

调用基础

  • 一般常用的方法和属性说明一下情况
    • 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);
          }
          @Override
          public 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),半径为r
          private void drawCircle(Canvas canvas, float cx, float cy, float r) {
              // 绘制圆形的代码
          }
          @Override
          public 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;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              viewToAnimate = findViewById(R.id.view_to_animate);
              // 创建一个属性动画,在1秒内将视图在x轴方向平移100px
              ValueAnimator animator = ValueAnimator.ofFloat(0f, 100f);
              animator.setDuration(1000);
              animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                  @Override
                  public 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);
          }
          @Override
          protected 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轴方向需要偏移10px
              childView.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);
          }
          @Override
          public 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);
          }
          @Override
          public 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);
          }
          @Override
          protected void onLayout(boolean changed, int l, int t, int r, int b) {
              // 布局子视图的代码
          }
          @Override
          public 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;
          }
          @Override
          public NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
              View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item_layout, parent, false);
              return new NewsViewHolder(view);
          }
          @Override
          public 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 {
          @Override
          protected 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() {
                  @Override
                  public 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);
          }
          @Override
          protected void onSaveInstanceState(Parcelable state) {
              Bundle bundle = new Bundle();
              // 将文本框中的文本内容存储为标签
              bundle.putString("text_content", getText().toString());
              bundle.putParcelable("super_state", state);
              state = bundle;
              super.onSaveInstanceState(state);
          }
          @Override
          protected 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 {
            // 处理子 View
            if (childView instanceof TextView) {
                // 如果是 TextView,执行特定操作
                TextView textView = (TextView) childView;
                textView.setText("Hello");
            }
        }
    }
}

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

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

相关文章

初识算法 · 位运算(end)

目录 前言&#xff1a; 题目解析 算法原理 算法编写 前言&#xff1a; 本文作为初识算法 位运算的最后一篇文章&#xff0c;使用一道hard题目来结束这个专题&#xff0c;题目的链接为&#xff1a; 面试题 17.19. 消失的两个数字 - 力扣&#xff08;LeetCode&#xff09;…

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用) 文章目录 3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)前言1. Spring Cloud Eureka 的概述1.1 服务治理概述1.2 服务注册与发现 2. 实践&#xff1a;创建单机 Eureka Server 注册中心2.1 需求说明 图解…

springboot实现简单的数据查询接口(无实体类)

目录 前言&#xff1a;springboot整体架构 1、ZjGxbMapper.xml 2、ZjGxbMapper.java 3、ZjGxbService.java 4、ZjGxbController.java 5、调用接口测试数据是否正确 6、打包放到服务器即可 前言&#xff1a;springboot整体架构 文件架构&#xff0c;主要编写框选的这几类…

awk(常用)

这个有点难 O.o 一、awk # 语法 awk 参数 模式 {动作} 文件# 第一列&#xff0c;包含p的 $1~"p" # 第一列&#xff0c;不包含p的 $1!~"p" # 开始时干嘛&#xff0c;结束时干嘛 awk BEGIN{开始时做的事}END{结束时做的事}{print $0} 文件 1、内置变量&…

EXPLAIN优化慢SQL

项目中发现数据查询很慢&#xff0c;导致前端超时等待的问题。经过日志打印发现&#xff0c;查询sql耗时10秒以上&#xff0c;相关sql如下&#xff1a; select distincttablemodel.*from pjtask_model tablemodelJOIN buss_type_permission a ON (tablemodel.fields_data_id …

Skywalking搭建-来自于图灵课堂

Skywalking主要用于链路追踪&#xff0c;日志收集查看&#xff0c;异常日志查看&#xff0c;服务监控弱一些&#xff0c;服务器监控可以使用prometheus 一、搭建服务端&#xff0c;使用startup.bat启动 配置持久化&#xff0c;如果是用mysql持久化&#xff0c;拷贝mysql链接包…

ZooKeeper单机、集群模式搭建教程

单点配置 ZooKeeper在启动的时候&#xff0c;默认会读取/conf/zoo.cfg配置文件&#xff0c;该文件缺失会报错。因此&#xff0c;我们需要在将容器/conf/挂载出来&#xff0c;在制定的目录下&#xff0c;添加zoo.cfg文件。 zoo.cfg logback.xml 配置文件的信息可以从二进制包…

计算机网络(11)和流量控制补充

这一篇对数据链路层中的和流量控制进行详细学习 流量控制&#xff08;Flow Control&#xff09;是计算机网络中确保数据流平稳传输的技术&#xff0c;旨在防止数据发送方发送过多数据&#xff0c;导致接收方的缓冲区溢出&#xff0c;进而造成数据丢失或传输失败。流量控制通常…

二元一次不定方程@整数解问题

文章目录 二元一次不定方程|整数解定理1整数解存在充要条件定理2 通解特解知识回顾利用辗转相除法求例 使用表达式凑出通解 二元一次不定方程|整数解 二元一次不定方程的一般形式为 a x b y c ax by c axbyc(1) 其中 a a a、 b b b、 c c c 是整数&#xff0c;且 a a a…

深入理解Flutter生命周期函数之StatefulWidget(一)

目录 前言 1.为什么需要生命周期函数 2.开发过程中常用的生命周期函数 1.initState() 2.didChangeDependencies() 3.build() 4.didUpdateWidget() 5.setState() 6.deactivate() 7.dispose() 3.Flutter生命周期总结 1.调用顺序 2.函数调用时机以及主要作用 4.生…

llama factory lora 微调 qwen2.5 7B Instruct模型

项目背景 甲方提供一台三卡4080显卡 需要进行qwen2.5 7b Instruct模型进行微调。以下为整体设计。 要使用 LLaMA-Factory 对 Qwen2.5 7B Instruct模型 进行 LoRA&#xff08;Low-Rank Adapters&#xff09;微调&#xff0c;流程与之前提到的 Qwen2 7B Instruct 模型类似。LoRA …

机器学习day2-特征工程

四.特征工程 1.概念 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 将任意数据&#xff08;文本或图像等&#xff09;转换为数字特征&#xff0c;对特征进行相关的处理 步骤&#xff1a;1.特征提取&#xff1b;2.无量纲化&#xff08;预处理&#xf…

Llama架构及代码详解

Llama的框架图如图&#xff1a; 源码中含有大量分布式训练相关的代码&#xff0c;读起来比较晦涩难懂&#xff0c;所以我们对llama自顶向下进行了解析及复现&#xff0c;我们对其划分成三层&#xff0c;分别是顶层、中层、和底层&#xff0c;如下&#xff1a; Llama的整体组成…

stm32在linux环境下的开发与调试

环境安装 注&#xff1a;文末提供一键脚本 下载安装stm32cubeclt 下载地址为&#xff1a;https://www.st.com/en/development-tools/stm32cubeclt.html 选择 linux版本下载安装 安装好后默认在家目录st下 > $ ls ~/st/stm32cubeclt_1.16.0 …

第T7周:Tensorflow实现咖啡豆识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: &#xff08;二&#xff09;具体步骤 1. 使…

亲测有效:Maven3.8.1使用Tomcat8插件启动项目

我本地maven的settings.xml文件中的配置&#xff1a; <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url> </mirror>…

LLM - 使用 LLaMA-Factory 微调大模型 Qwen2-VL SFT(LoRA) 图像数据集 教程 (2)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/143725947 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 LLaMA-…

神经网络与Transformer详解

一、模型就是一个数学公式 模型可以描述为:给定一组输入数据,经过一系列数学公式计算后,输出n个概率,分别代表该用户对话属于某分类的概率。 图中 a, b 就是模型的参数,a决定斜率,b决定截距。 二、神经网络的公式结构 举例:MNIST包含了70,000张手写数字的图像,其中…

鲸鱼机器人和乐高机器人的比较

鲸鱼机器人和乐高机器人各有其独特的优势和特点&#xff0c;家长在选择时可以根据孩子的年龄、兴趣、经济能力等因素进行综合考虑&#xff0c;选择最适合孩子的教育机器人产品。 优势 鲸鱼机器人 1&#xff09;价格亲民&#xff1a;鲸鱼机器人的产品价格相对乐高更为亲民&…

Flink Source 详解

Flink Source 详解 原文 flip-27 FLIP-27 介绍了新版本Source 接口定义及架构 相比于SourceFunction&#xff0c;新版本的Source更具灵活性&#xff0c;原因是将“splits数据获取”与真“正数据获取”逻辑进行了分离 重要部件 Source 作为工厂类&#xff0c;会创建以下两…