Android安卓实战项目(6)---健身运动 APP实现健身运动倒计时显示提醒(源码在文末)

news2024/11/24 1:19:12

Android安卓实战项目(6)—健身运动 APP实现健身运动倒计时(源码在文末🐕🐕🐕)

一.项目运行介绍

【bilibili演示】 https://www.bilibili.com/video/BV1414y167WH/?share_source=copy_web&vd_source=b2e9b9ed746acda34f499009647748ed
image-20230802203651309

image-20230802203705701

image-20230802203721647

image-20230802203734567

image-20230802203814475

二.具体实现

(1)功能一开机页面

MainActivity.java
package com.example.fitness;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    TextView titlepage,subtitlepage;
    ImageView imgpage;
    TextView btnexercise;
    View bgprogress, bgprogresstop;
    Animation animimgpage, bttone,bttwo, btthree,ltr;
    Intent i1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        titlepage = findViewById(R.id.titlepage);
        subtitlepage=findViewById(R.id.subtitlepage);
        btnexercise = findViewById(R.id.btnexercise);
        imgpage = findViewById(R.id.imgpage);
        bgprogress = findViewById(R.id.bgprogress);
        bgprogresstop = findViewById(R.id.bgprogresstop);


        //animasyon ata
        animimgpage= AnimationUtils.loadAnimation(this,R.anim.animimgpage);
        bttone = AnimationUtils.loadAnimation(this,R.anim.bttone);
        bttwo=AnimationUtils.loadAnimation(this,R.anim.bttwo);
        btthree=AnimationUtils.loadAnimation(this,R.anim.btthree);
        ltr=AnimationUtils.loadAnimation(this,R.anim.ltr);



        imgpage.startAnimation(animimgpage);
        titlepage.startAnimation(bttone);
        subtitlepage.startAnimation(bttone);

        btnexercise.startAnimation(btthree);
        bgprogress.startAnimation(bttwo);
        bgprogresstop.startAnimation(ltr);


        //fontları import ediyoruz
        Typeface MLight = Typeface.createFromAsset(getAssets(),"fonts/MLight.ttf");
        Typeface MMedium = Typeface.createFromAsset(getAssets(),"fonts/MMedium.ttf");
        Typeface Vidaloka = Typeface.createFromAsset(getAssets(),"fonts/Vidaloka.ttf");


        //textView'a font atadık
        titlepage.setTypeface(Vidaloka);
        subtitlepage.setTypeface(MLight);
        btnexercise.setTypeface(MMedium);


    }

    public void start(View v){
        i1 = new Intent (MainActivity.this,WorkoutAct.class);
        i1.addFlags(i1.FLAG_ACTIVITY_NO_ANIMATION);
        startActivity(i1);
    }
}
  1. 导入必要的类和包:
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import org.w3c.dom.Text;

这部分代码导入了一些Android SDK和其他类,用于处理Activity、Intent、视图(View)、动画(Animation)、字体(Typeface)以及一些控件(Button、ImageView、TextView)的操作。

  1. 定义MainActivity类并继承AppCompatActivity:
public class MainActivity extends AppCompatActivity {

这段代码定义了一个名为MainActivity的类,并让它继承自AppCompatActivityAppCompatActivity是Android Support Library提供的类,它提供了与向后兼容性相关的功能。

  1. 声明各种控件和变量:
TextView titlepage, subtitlepage;
ImageView imgpage;
TextView btnexercise;
View bgprogress, bgprogresstop;
Animation animimgpage, bttone, bttwo, btthree, ltr;
Intent i1;

在这部分代码中,声明了各种控件的变量,如TextViewImageViewView等。这些变量将用于在后面的代码中与相应的布局中的控件进行关联。

  1. onCreate方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // ... 以下代码略
}

onCreate方法是Activity的生命周期方法之一,当Activity第一次创建时会调用这个方法。在这个方法中,我们完成了一些初始化工作。

  1. 找到控件并与变量关联:
titlepage = findViewById(R.id.titlepage);
subtitlepage = findViewById(R.id.subtitlepage);
btnexercise = findViewById(R.id.btnexercise);
imgpage = findViewById(R.id.imgpage);
bgprogress = findViewById(R.id.bgprogress);
bgprogresstop = findViewById(R.id.bgprogresstop);

这段代码通过findViewById方法找到在布局文件(activity_main.xml)中定义的对应控件,并将它们与前面声明的变量关联起来。findViewById方法通过传入控件的ID(R.id.xxx)来找到相应的控件对象。

  1. 加载动画资源:
animimgpage = AnimationUtils.loadAnimation(this, R.anim.animimgpage);
bttone = AnimationUtils.loadAnimation(this, R.anim.bttone);
bttwo = AnimationUtils.loadAnimation(this, R.anim.bttwo);
btthree = AnimationUtils.loadAnimation(this, R.anim.btthree);
ltr = AnimationUtils.loadAnimation(this, R.anim.ltr);

这部分代码加载了一系列动画资源。这些资源定义在res目录下的anim文件夹中,分别对应着不同的动画效果。

  1. 为各个控件设置动画效果:
imgpage.startAnimation(animimgpage);
titlepage.startAnimation(bttone);
subtitlepage.startAnimation(bttone);
btnexercise.startAnimation(btthree);
bgprogress.startAnimation(bttwo);
bgprogresstop.startAnimation(ltr);

通过调用startAnimation方法,将前面加载的动画资源分别应用到imgpagetitlepagesubtitlepagebtnexercisebgprogressbgprogresstop这些控件上,从而为它们添加了动画效果。

  1. 导入字体资源并为文本设置不同字体:
Typeface MLight = Typeface.createFromAsset(getAssets(), "fonts/MLight.ttf");
Typeface MMedium = Typeface.createFromAsset(getAssets(), "fonts/MMedium.ttf");
Typeface Vidaloka = Typeface.createFromAsset(getAssets(), "fonts/Vidaloka.ttf");

在这部分代码中,导入了字体资源,并通过createFromAsset方法创建了三种不同的字体对象:MLightMMediumVidaloka

titlepage.setTypeface(Vidaloka);
subtitlepage.setTypeface(MLight);
btnexercise.setTypeface(MMedium);

最后,通过调用setTypeface方法,将前面创建的字体对象分别应用到titlepagesubtitlepagebtnexercise这三个TextView控件上,从而改变了这些文本的字体。

  1. start方法:
public void start(View v) {
    i1 = new Intent(MainActivity.this, WorkoutAct.class);
    i1.addFlags(i1.FLAG_ACTIVITY_NO_ANIMATION);
    startActivity(i1);
}

这是一个名为start的公共方法,用于处理按钮的点击事件。当用户点击btnexercise按钮时,会调用这个方法。

在这个方法中,首先创建了一个新的Intent对象i1,用于启动另一个活动WorkoutAct。然后,通过调用addFlags方法,给i1对象添加了一个标记(FLAG_ACTIVITY_NO_ANIMATION),这个标记表示在启动新的活动时,不播放切换动画。最后,通过调用startActivity方法,启动了新的活动,实现了跳转到WorkoutAct的功能。

至此,我们对这段代码进行了详细的分析。这个代码实现了一个简单的健身应用的主界面,并为其中的一些控件添加了动画效果和自定义字体。同时,点击按钮还可以跳转到另一个活动。

(2)功能二实现倒计时

WorkoutAct.java
package com.example.fitness;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.TextView;

public class WorkoutAct extends AppCompatActivity {

    Intent i1;
    TextView titlepage, subtitlepage, intropage, subintropage,
            btnexercise, fitonetitle, fitonedesc, fittwotitle, fittwodesc,
            fitthreetitle, fitthreedesc, fitfourtitle, fitfourdesc;

    Animation bttone, bttwo, bttfour, bttfive, bttsix, bttseven, btteight;

    View divpage, bgprogress;

    LinearLayout fitone, fittwo, fitthree, fitfour;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_workout);

        // load animations
        bttone = AnimationUtils.loadAnimation(this, R.anim.bttone);
        bttwo = AnimationUtils.loadAnimation(this, R.anim.bttwo);
        bttfour = AnimationUtils.loadAnimation(this, R.anim.bttfour);
        bttfive = AnimationUtils.loadAnimation(this, R.anim.bttfive);
        bttsix = AnimationUtils.loadAnimation(this, R.anim.bttsix);
        bttseven = AnimationUtils.loadAnimation(this, R.anim.bttseven);
        btteight = AnimationUtils.loadAnimation(this, R.anim.btteight);

        //fontları import ediyoruz
        Typeface MLight = Typeface.createFromAsset(getAssets(),"fonts/MLight.ttf");
        Typeface MMedium = Typeface.createFromAsset(getAssets(),"fonts/MMedium.ttf");
        Typeface Vidaloka = Typeface.createFromAsset(getAssets(),"fonts/Vidaloka.ttf");

        titlepage = (TextView) findViewById(R.id.titlepage);
        subtitlepage = (TextView) findViewById(R.id.subtitlepage);
        intropage = (TextView) findViewById(R.id.intropage);
        subintropage = (TextView) findViewById(R.id.subintropage);
        btnexercise = (TextView) findViewById(R.id.btnexercise);
        divpage = (View) findViewById(R.id.divpage);
        bgprogress = (View) findViewById(R.id.bgprogress);


        // item fit layout
        fitone = (LinearLayout) findViewById(R.id.fitone);
        fittwo = (LinearLayout) findViewById(R.id.fittwo);
        fitthree = (LinearLayout) findViewById(R.id.fitthree);
        fitfour = (LinearLayout) findViewById(R.id.fitfour);

        // item fit
        fitonetitle = (TextView) findViewById(R.id.fitonetitle);
        fitonedesc = (TextView) findViewById(R.id.fitonedesc);

        fittwotitle = (TextView) findViewById(R.id.fittwotitle);
        fittwodesc = (TextView) findViewById(R.id.fittwodesc);

        fitthreetitle = (TextView) findViewById(R.id.fitthreetitle);
        fitthreedesc = (TextView) findViewById(R.id.fitthreedesc);

        fitfourtitle = (TextView) findViewById(R.id.fitfourtitle);
        fitfourdesc = (TextView) findViewById(R.id.fitfourdesc);

        //fit itemleri
        fitonetitle=findViewById(R.id.fitonetitle);
        fitonedesc=findViewById(R.id.fitonedesc);

        //textView'a font atadık
        titlepage.setTypeface(Vidaloka);
        subtitlepage.setTypeface(MLight);
        btnexercise.setTypeface(MMedium);
        intropage.setTypeface(Vidaloka);
        subintropage.setTypeface(MLight);

        //fit itemler'a font ata
        fitonedesc.setTypeface(MLight);
        fitonetitle.setTypeface(MMedium);


        // assign the animations
        titlepage.startAnimation(bttone);
        subtitlepage.startAnimation(bttone);
        divpage.startAnimation(bttone);

        intropage.startAnimation(bttwo);
        subintropage.startAnimation(bttwo);

        fitone.startAnimation(bttwo);
        fittwo.startAnimation(bttfour);
        fitthree.startAnimation(bttfive);
        fitfour.startAnimation(bttsix);

        btnexercise.startAnimation(btteight);
        bgprogress.startAnimation(bttseven);
    }

    public void startNow(View v){
        i1 = new Intent (this,StartWorkAct.class);
        i1.addFlags(i1.FLAG_ACTIVITY_NO_ANIMATION);
        startActivity(i1);
    }
}
StartWorkAct.java
package com.example.fitness;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Typeface;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Locale;

public class StartWorkAct extends AppCompatActivity {

    TextView intropage, subintropage,fitonetitle,fitonedesc,
            btnexercise,timerValue;
    View divpage,bgprogress;
    ImageView imgtimer;
    LinearLayout fitone;

    private static final long START_TIME_IN_MILLIS = 800000;
    private CountDownTimer countDownTimer;
    private boolean aTimerRunning;
    private long mTimeLeftInMillis = START_TIME_IN_MILLIS;

    Animation btthree,bttfour,ttbone,ttbtwo, alphagogo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start_work);

        //animasyonları tanımlıyoruz
        btthree = AnimationUtils.loadAnimation(this,R.anim.btthree);
        bttfour = AnimationUtils.loadAnimation(this,R.anim.bttfour);
        ttbone = AnimationUtils.loadAnimation(this,R.anim.ttbone);
        ttbtwo = AnimationUtils.loadAnimation(this,R.anim.ttbtwo);
        alphagogo = AnimationUtils.loadAnimation(this,R.anim.alphagogo);



        //fontları import ediyoruz
        Typeface MLight = Typeface.createFromAsset(getAssets(),"fonts/MLight.ttf");
        Typeface MMedium = Typeface.createFromAsset(getAssets(),"fonts/MMedium.ttf");
        Typeface Vidaloka = Typeface.createFromAsset(getAssets(),"fonts/Vidaloka.ttf");

        timerValue = findViewById(R.id.timerValue);
        intropage = (TextView) findViewById(R.id.intropage);
        subintropage = (TextView) findViewById(R.id.subintropage);
        btnexercise = (TextView) findViewById(R.id.btnexercise);
        //fit itemleri
        fitonetitle=findViewById(R.id.fitonetitle);
        fitonedesc=findViewById(R.id.fitonedesc);
        bgprogress=findViewById(R.id.bgprogress);
        divpage=findViewById(R.id.divpage);
        fitone=findViewById(R.id.fitone);
        imgtimer = findViewById(R.id.imgtimer);



        intropage.setTypeface(Vidaloka);
        subintropage.setTypeface(MLight);
        btnexercise.setTypeface(MMedium);

        //fit itemler'a font ata
        fitonedesc.setTypeface(MLight);
        fitonetitle.setTypeface(MMedium);

        btnexercise.startAnimation(bttfour);
        bgprogress.startAnimation(btthree);
        fitone.startAnimation(ttbone);
        intropage.startAnimation(ttbtwo);
        subintropage.startAnimation(ttbtwo);
        divpage.startAnimation(ttbtwo);
        imgtimer.startAnimation(alphagogo);
        timerValue.startAnimation(alphagogo);

        startTimer();

    }

    private void startTimer(){
        countDownTimer = new CountDownTimer(mTimeLeftInMillis,1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                mTimeLeftInMillis=millisUntilFinished;
                updateCountDownText();
            }

            @Override
            public void onFinish() {
            Toast.makeText(getApplicationContext(),"Congratulations!",Toast.LENGTH_SHORT).show();
            }
        }.start();
    }

    private void updateCountDownText(){
        int minutes = (int) (mTimeLeftInMillis/1000)/60;
        int seconds = (int) (mTimeLeftInMillis/1000)%60;

        String timeLeft = String.format(Locale.getDefault(),"%02d:%02d",minutes,seconds);
        timerValue.setText(timeLeft);
    }

}
  1. StartWorkAct.java:

这个类是一个Android活动(Activity),继承了AppCompatActivity类。它似乎是一个基于计时器的健身锻炼活动。以下是代码的分解:

  • 导入:在文件的开头导入了必要的Android类和库。

  • 类和变量:定义了StartWorkAct类,并声明了各种TextViewViewImageViewLinearLayoutAnimationTypeface对象作为类级变量。

  • 常量:该类定义了一个名为START_TIME_IN_MILLIS的常量,其值为800,000毫秒(相当于8分钟)。

  • 动画:使用AnimationUtils.loadAnimation从动画资源文件中加载动画对象,并将它们存储在类变量中。

  • 视图和字体:使用相应的ID从布局XML文件中初始化各种视图。还从assets文件夹中加载自定义字体,并将其应用于某些视图。

  • onCreate:在onCreate方法中,使用setContentView(R.layout.activity_start_work)设置了布局。使用setTypeface为某些视图应用了字体样式。

  • 动画:使用startAnimation在各个视图上启动了各种动画。

  • startTimer:定义了一个方法用于启动倒计时器。它创建了一个CountDownTimer,初始时间为START_TIME_IN_MILLIS,并更新TextViewtimerValue)以显示剩余时间(以分钟和秒为单位)。

  1. WorkoutAct.java:

这个类也是一个AppCompatActivity,代表了Android应用中的另一个活动。它似乎是用于显示不同健身锻炼方案。以下是代码的分解:

  • 导入:在文件的开头导入了必要的Android类和库。

  • 类和变量:定义了WorkoutAct类,并声明了各种TextViewViewLinearLayoutAnimationIntent对象作为类级变量。

  • 动画:使用AnimationUtils.loadAnimation从动画资源文件中加载动画对象,并将它们存储在类变量中。

  • 视图和字体:使用相应的ID从布局XML文件中初始化各种视图。使用setTypeface为某些视图应用了自定义字体样式。

  • onCreate:在onCreate方法中,使用setContentView(R.layout.activity_workout)设置了布局。使用setTypeface为某些视图应用了字体样式。

  • 动画:使用startAnimation在各个视图上启动了各种动画。

  • startNow:这个方法在用户点击“立即开始”按钮(btnexercise)时被调用。它创建一个Intent用于导航到StartWorkAct活动,并以无动画的方式启动它。

三.项目源码

链接:https://pan.baidu.com/s/1gBvP0f2HF0RF1T5jQxF8PA?pwd=jynl
提取码:jynl

已开源

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

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

相关文章

接受平庸,特别是程序员

目录 方向一:简述自己的感受 方向二:聊聊你想怎么做 方向三:如何调整自己的心态 虽然清楚知识需要靠时间沉淀,但在看到自己做不出来的题别人会做,自己写不出的代码别人会写时还是会感到焦虑怎么办? 你是…

棕榈酰四肽-7——促进皮肤自然愈合和再生

简介 棕榈酰四肽-7(Palmitoyl Tetrapeptide-7)可以延缓和抑制过量细胞白介素的生成,从而抑制一些不必要不恰当的炎症反应和糖基化损伤。在体外实验中,科学家们发现在细胞白介素生成时,“棕榈酰四肽-7诱导呈现出一种显…

2023-08-02 LeetCode每日一题(翻转卡片游戏)

2023-08-02每日一题 一、题目编号 822. 翻转卡片游戏二、题目链接 点击跳转到题目位置 三、题目描述 在桌子上有 N 张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样)。 我们可以先翻转任意张卡片,…

【Unity3D】Shader Graph简介

1 Shader Graph 简介 Shader Graph 是 Unity 官方在 2018 年推出的 Shader 制作插件,是图形化的 Shader 制作工具,类似于 Blender 中的 Shader Editor 和 UE 中的 Material Editor,它使用流程图的形式表达顶点变换和片元着色的流程。 Shader …

GC垃圾回收器【入门笔记】

GC:Garbage Collectors 垃圾回收器 C/C,手动回收内存;难调试、门槛高。忘记回收、多次回收等问题 Java、Golang等,有垃圾回收器:自动回收,技术门槛降低 一、如何定位垃圾? https://www.infoq.c…

<C++>二、 类和对象

1.面向对象和面向过程 C语言是面向过程的,关注的是过程,分析出求解问题的步骤, 通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 2. C类 C…

直击运维痛点,大数据计算引擎 EasyMR 的监控告警设计优化之路

当企业的业务发展到一定的阶段时,在系统中引入监控告警系统来对系统/业务进行监控是必备的流程。没有监控或者没有一个好的监控,会导致开发人员无法快速判断系统是否健康;告警的实质则是“把人当服务用”,用告警通知人的方式去干预…

小研究 - 微服务系统服务依赖发现技术综述(二)

微服务架构得到了广泛的部署与应用, 提升了软件系统开发的效率, 降低了系统更新与维护的成本, 提高了系统的可扩展性. 但微服务变更频繁、异构融合等特点使得微服务故障频发、其故障传播快且影响大, 同时微服务间复杂的调用依赖关系或逻辑依赖关系又使得其故障难以被及时、准确…

SVN代码迁移到Git方法

1.在SVN上新增一个项目 一、点击新建项目 二、创建空白项目 三、填入项目信息 四、myProject项目模板创建成功 2.将代码提交到Git 一、新建一个文件夹myProject,将从SVN下载过来的代码复制一份拷贝到该文件夹下,注意:不要把.SVN文件拷…

兴达易控Profinet转Modbus RTU主站模式的配置流程

兴达易控Profinet转Modbus RTU主站网关,能够实现不同协议之间的设备数据传输。这种设备具有高度的可靠性和稳定性,能够满足工业领域对通信设备的严格要求。同时,兴达易控Profinet转Modbus RTU主站还具备简单易用的特点,使用现场能…

安防视频监控平台EasyCVR修改参数提示database or disk is full的原因排查

EasyDarwin开源流媒体视频EasyCVR安防监控平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等能力。视频监控综合管理平台EasyCVR具备视频汇聚融合能力,平台基于云边端一体化架构,具有强大…

查看内存类型和频率 - Win系统

查看内存类型和频率 - Win系统 问题方法1(推荐):使用命令行方法2:使用CPU-Z方法3:使用AIDA64 问题 我们在为电脑扩充内存时需要提前了解电脑内存的类型和频率,防止内存不兼容,但在设备管理器和…

从零实现深度学习框架——Transformer从菜鸟到高手(一)

引言 💡本文为🔗[从零实现深度学习框架]系列文章内部限免文章,更多限免文章见 🔗专栏目录。 本着“凡我不能创造的,我就不能理解”的思想,系列文章会基于纯Python和NumPy从零创建自己的类PyTorch深度学习框…

Node版本的切换之Window

步骤一:按健winR窗口,键盘输入cmd,然后回车。 步骤二: 输入where node,显示 步骤三:进入node.exe目录,并且删除父目录文件夹即:nodejs文件夹 步骤四:从官网下载版本管理并安装&#…

亚马逊店铺的回款周期是多久?

现如今,开亚马逊店铺可是一个技术活,一旦有一个环节,或者是一件事情没有做好,对整个亚马逊店铺过程中影响都是十分巨大的,不少亚马逊卖家就吃过这方面的亏。 很多亚马逊卖家就是吃亏在这些方面,现在要想开…

线程数突增!领导:谁再这么写就滚蛋!

今天给大家分享一个线上问题引出的一次思考,过程比较长,但是挺有意思。 今天上班把需求写完,出于学习(摸鱼)的心理上skywalking看看,突然发现我们的一个应用,应用内线程数超过900条&#xff0c…

高忆管理:散户可以做空股票吗?散户如何做空?

在美国股市上,投资者能够进行做多操作,也能够进行做空操作,那么,在a股上,散户能够做空股票吗?散户如何做空?下面高忆管理为我们预备了相关内容,以供参考。 在a股市场上,散…

2023年最适合您业务的免费CRM——SaleSmartl

使用免费的CRM软件,例如SaleSmartly,可以协助您更好地发展您的业务,是提高生产力、减少错误、自动化重复性任务和享受交易机会的宝贵工具。您可以将多个渠道的客户信息集中在一个平台上,并允许员工访问,以便给他们分配…

VS+QT+VTK treeView树型结构模型加载隐藏实例

程序示例精选 VSQTVTK treeView树型结构模型加载隐藏实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQTVTK treeView树型结构模型加载隐藏实例>>编写代码&#xff0c;代码…

gateway过滤器没生效,特殊原因

看这边文章的前提&#xff0c;你要会gateway&#xff0c;知道过滤器怎么配置&#xff1f; 直接来看过滤器&#xff0c;局部过滤器 再来看配置 请求路径 http://127.0.0.1:8080/appframework/services/catalog/catalogSpecials.json?pageindex1&pagesize10&pkidd98…