Android Studio第三方github库导入法(一)——CV大法
文章目录
一、Waveform
以导入Waveform项目的wavelib库为例
Waveform项目主要是基于Android Studio环境java语言实现动态滚动波形图(心电图)
由于电赛需要进行实时绘点展现动态波形,因此采用了GiftedCat大佬的Waveform项目里的库
大佬的测试效果图:
GiftedCat大佬的完整博客地址:https://juejin.cn/post/6912791803779350536
github项目地址:https://github.com/Giftedcat/Waveform
二、导入方法
我这里采用的是另一种粗暴的导入法,因为大佬博客上的方法那会我还不太会用(哭笑)
1.github项目下载
先到github上的https://github.com/Giftedcat/Waveform项目界面
把项目下载到本地
2.创建一个新的项目
3.拷贝wavelib库
Waveform项目下载好后,用Android Studio打开,选择Project将里面的wavelib库进行复制
在我们新建的项目waveTest同样选择Project
在Project中右键waveTest,选择Paste(粘贴)
点击OK
粘贴好后会像下面一样,这时候呢,感觉wavelib就是个普通目录(我们希望它是一个library的形式)
点击setting.gradle,在setting.gradle中include 后面添加,':wavelib'
, 最后点击Sync now进行同步
当同步好后,这时候就会发现wavelib变为library的形式啦
4.修改wavelib库的build.gradle文件
先把Project界面切换到Android界面
wavelib的build.gradle参照app的build.gradle进行对应部分的修改
我app的build.gradle
plugins {
id 'com.android.application'
}
android {
compileSdk 32
defaultConfig {
applicationId "com.example.wavetest"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
修改前,我wavelib的build.gradle
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
group = 'com.github.Giftedcat'
version = '1.3.2'
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
minSdkVersion 15
targetSdkVersion 30
versionCode 6
versionName "1.3.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
task comps {
afterEvaluate {
println("Components: " + components*.name)
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
afterEvaluate {
publishing {
publications {
// Creates a Maven publication called "release".
release(MavenPublication) {
from components.release
groupId = 'com.github.Giftedcat'
artifactId = 'Waveform'
version = '1.3.2'
}
}
}
}
修改后,我wavelib的build.gradle
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
group = 'com.github.Giftedcat'
version = '1.3.2'
android {
compileSdkVersion 32
buildToolsVersion "30.0.3"
defaultConfig {
minSdkVersion 21
targetSdkVersion 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
task comps {
afterEvaluate {
println("Components: " + components*.name)
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.3.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test:runner:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
afterEvaluate {
publishing {
publications {
// Creates a Maven publication called "release".
release(MavenPublication) {
from components.release
groupId = 'com.github.Giftedcat'
artifactId = 'Waveform'
version = '1.3.2'
}
}
}
}
修改好后,同步即可
5.引用wavelib库
同步好后,在MainActivity中试着写入import com.giftedcat.wavelib.view.WaveView;
import com.giftedcat.wavelib.view.WaveView;
此时发现报红,将鼠标光标箭头移动到WaveView处,然后点击Add…
Add后,错误消失,目前其实已成功导入
三、测试wavelib库
1.了解使用方法
参考GiftedCat大佬的项目使用介绍:使用手册
2.上手实践(单数据添加)
在activity_main.xml中,我使用了一个绘图控件布局和一个按钮(按钮作为触发数据发送)
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.giftedcat.wavelib.view.WaveView
android:id="@+id/wave_view2"
android:layout_width="match_parent"
android:layout_height="500dp"
app:draw_mode="normal"
app:wave_line_stroke_width="5"
app:wave_background="#FFFFFF"
tools:ignore="MissingConstraints" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="改变"
android:id="@+id/bnt">
</Button>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.example.wavetest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.giftedcat.wavelib.view.WaveView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private WaveView waveShowView;
private Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
waveShowView = findViewById(R.id.wave_view2);
//点击按钮
btn1 = findViewById(R.id.bnt);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
float data = new Random().nextFloat()*(20f)-10f;
waveShowView.showLine(data);
Toast.makeText(MainActivity.this,""+data,Toast.LENGTH_SHORT).show();
}
});
}
}
效果展示:(当每次按下按钮时,会取到一个-10到10间的浮点数,绘图控件将其描绘在图上)
3.小扩展(多数据添加)
MainActivity.java(一次添加5个)
package com.example.wavetest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.giftedcat.wavelib.view.WaveView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private WaveView waveShowView;
private Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
waveShowView = findViewById(R.id.wave_view2);
//点击按钮
btn1 = findViewById(R.id.bnt);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int length = 5; //数据个数
float[] datas = new float[length];
for (int i = 0; i < datas.length; i++){
datas[i] = new Random().nextFloat()*(20f)-10f;
}
waveShowView.showLines(datas);
// Toast.makeText(MainActivity.this,""+data,Toast.LENGTH_SHORT).show();
}
});
}
}