diff --git a/app/build.gradle b/app/build.gradle index 7b7cdee..00f2be2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' +//apply plugin: 'kotlin-android-extensions' android { - compileSdkVersion 28 + compileSdkVersion 34 defaultConfig { applicationId "com.scwang.wave.app" minSdkVersion 14 - targetSdkVersion 28 + targetSdkVersion 34 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -19,6 +19,14 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +// kotlinOptions { +// jvmTarget '1.8' +// } + namespace 'com.scwang.wave.app' } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8c65188..50baa35 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + + + - - - diff --git a/app/src/main/java/com/scwang/wave/app/activity/FragmentActivity.kt b/app/src/main/java/com/scwang/wave/app/activity/FragmentActivity.kt index d59fc05..ddedc1a 100644 --- a/app/src/main/java/com/scwang/wave/app/activity/FragmentActivity.kt +++ b/app/src/main/java/com/scwang/wave/app/activity/FragmentActivity.kt @@ -40,7 +40,7 @@ class FragmentActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - mFragmentClazz = intent.getStringExtra(EXTRA_FRAGMENT) + mFragmentClazz = intent.getStringExtra(EXTRA_FRAGMENT).toString() val frameLayout = FrameLayout(this) frameLayout.id = widget_frame setContentView(frameLayout) diff --git a/app/src/main/java/com/scwang/wave/app/activity/MainActivity.kt b/app/src/main/java/com/scwang/wave/app/activity/MainActivity.kt index 2f2cb6b..a592372 100644 --- a/app/src/main/java/com/scwang/wave/app/activity/MainActivity.kt +++ b/app/src/main/java/com/scwang/wave/app/activity/MainActivity.kt @@ -6,12 +6,20 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction import androidx.appcompat.app.AppCompatActivity import android.view.MenuItem +import android.widget.FrameLayout +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import com.google.android.material.bottomnavigation.BottomNavigationView import com.scwang.wave.app.R import com.scwang.wave.app.fragment.WaveConsoleFragment -import kotlinx.android.synthetic.main.activity_main.* +//import kotlinx.android.synthetic.main.activity_main.* import kotlin.reflect.KClass class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener { + private val mNavigation by lazy { findViewById(R.id.navigation) } + private val mContent by lazy { findViewById(R.id.content) } + private val mMessage by lazy { findViewById(R.id.message) } + private val mContainer by lazy { findViewById(R.id.container) } enum class Tabs(val menuId: Int, val clazz: KClass) { WavePair(R.id.navigation_home, WaveConsoleFragment::class), @@ -23,8 +31,9 @@ class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - navigation.setOnNavigationItemSelectedListener(this) - navigation.selectedItemId = R.id.navigation_home + + mNavigation.setOnNavigationItemSelectedListener(this) + mNavigation.selectedItemId = R.id.navigation_home } override fun onNavigationItemSelected(item: MenuItem): Boolean { diff --git a/app/src/main/java/com/scwang/wave/app/activity/UserLoginActivity.kt b/app/src/main/java/com/scwang/wave/app/activity/UserLoginActivity.kt index 7660c14..c6569dc 100644 --- a/app/src/main/java/com/scwang/wave/app/activity/UserLoginActivity.kt +++ b/app/src/main/java/com/scwang/wave/app/activity/UserLoginActivity.kt @@ -1,14 +1,28 @@ package com.scwang.wave.app.activity import android.os.Bundle +import android.widget.EditText +import android.widget.ImageView +import android.widget.TextView import androidx.appcompat.app.AppCompatActivity +import com.scwang.wave.MultiWaveHeader import com.scwang.wave.app.R import com.scwang.wave.app.fragment.WaveConsoleFragment import com.scwang.wave.app.util.StatusBarUtil -import kotlinx.android.synthetic.main.activity_user_login.* +//import kotlinx.android.synthetic.main.activity_user_login.* class UserLoginActivity : AppCompatActivity() { + private val mVerifyMode by lazy { findViewById(R.id.verify_mode) } + private val mTouristMode by lazy { findViewById(R.id.tourist_mode) } + private val mRegister by lazy { findViewById(R.id.register) } + private val mLogin by lazy { findViewById(R.id.login) } + private val mForget by lazy { findViewById(R.id.forget) } + private val mDelete by lazy { findViewById(R.id.delete) } + private val mPassword by lazy { findViewById(R.id.password) } + private val mUsername by lazy { findViewById(R.id.username) } + private val mLogo by lazy { findViewById(R.id.logo) } + private val mWaveHeader by lazy { findViewById(R.id.waveHeader) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -16,7 +30,7 @@ class UserLoginActivity : AppCompatActivity() { //状态栏透明和间距处理 StatusBarUtil.immersive(this) - login.setOnClickListener { + mLogin.setOnClickListener { // startActivity(Intent(this, MainActivity::class.java)) FragmentActivity.start(this, WaveConsoleFragment::class.java) } diff --git a/app/src/main/java/com/scwang/wave/app/fragment/WaveConsoleFragment.kt b/app/src/main/java/com/scwang/wave/app/fragment/WaveConsoleFragment.kt index cd70310..8f05322 100644 --- a/app/src/main/java/com/scwang/wave/app/fragment/WaveConsoleFragment.kt +++ b/app/src/main/java/com/scwang/wave/app/fragment/WaveConsoleFragment.kt @@ -3,87 +3,121 @@ package com.scwang.wave.app.fragment import android.content.res.Resources import android.os.Bundle -import androidx.fragment.app.Fragment -import androidx.core.content.ContextCompat import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.CheckBox +import android.widget.RadioButton +import android.widget.RadioGroup +import androidx.appcompat.widget.Toolbar +import androidx.core.content.ContextCompat +import androidx.fragment.app.Fragment import com.larswerkman.lobsterpicker.OnColorListener +import com.larswerkman.lobsterpicker.sliders.LobsterShadeSlider +import com.scwang.wave.MultiWaveHeader import com.scwang.wave.ShapeType import com.scwang.wave.app.R import com.scwang.wave.app.util.StatusBarUtil -import kotlinx.android.synthetic.main.fragment_wave_console.* import org.adw.library.widgets.discreteseekbar.DiscreteSeekBar /** * A simple [Fragment] subclass. */ -class WaveConsoleFragment : androidx.fragment.app.Fragment(), DiscreteSeekBar.OnProgressChangeListener { +class WaveConsoleFragment : Fragment(), DiscreteSeekBar.OnProgressChangeListener { + private val toolbar by lazy { view?.findViewById(R.id.toolbar) } + private val sliderCloseColor by lazy { view?.findViewById(R.id.sliderCloseColor) } + private val sliderStartColor by lazy { view?.findViewById(R.id.sliderStartColor) } + private val seekProgress by lazy { view?.findViewById(R.id.seekProgress) } + private val seekVelocity by lazy { view?.findViewById(R.id.seekVelocity) } + private val seekAlpha by lazy { view?.findViewById(R.id.seekAlpha) } + private val seekAngle by lazy { view?.findViewById(R.id.seekAngle) } + private val seekWave by lazy { view?.findViewById(R.id.seekWave) } + private val seekNumber by lazy { view?.findViewById(R.id.seekNumber) } + private val radioOval by lazy { view?.findViewById(R.id.radioOval) } + private val radioRoundRect by lazy { view?.findViewById(R.id.radioRoundRect) } + private val radioRect by lazy { view?.findViewById(R.id.radioRect) } + private val radioGroup by lazy { view?.findViewById(R.id.radioGroup) } + private val checkBoxRunning by lazy { view?.findViewById(R.id.checkBoxRunning) } + private val checkBoxDirection by lazy { view?.findViewById(R.id.checkBoxDirection) } + private val multiWaveHeader by lazy { view?.findViewById(R.id.multiWaveHeader) } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_wave_console, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + StatusBarUtil.immersive(activity) StatusBarUtil.setPaddingSmart(context, toolbar) - toolbar.setNavigationOnClickListener { + toolbar?.setNavigationOnClickListener { activity?.finish() } - seekAngle.progress = multiWaveHeader.gradientAngle - seekVelocity.progress = (multiWaveHeader.velocity * 10).toInt() - seekAlpha.progress = (multiWaveHeader.colorAlpha * 100).toInt() - seekProgress.progress = (multiWaveHeader.progress * 100).toInt() - seekWave.progress = (multiWaveHeader.waveHeight / Resources.getSystem().displayMetrics.density).toInt() - checkBoxRunning.isChecked = multiWaveHeader.isRunning - checkBoxDirection.isChecked = multiWaveHeader.scaleY == -1f - - seekWave.setOnProgressChangeListener(this) - seekAngle.setOnProgressChangeListener(this) - seekVelocity.setOnProgressChangeListener(this) - seekProgress.setOnProgressChangeListener(this) - seekAlpha.setOnProgressChangeListener(this) - seekNumber.setOnProgressChangeListener(this) - checkBoxRunning.setOnCheckedChangeListener {_,value-> + seekAngle?.progress = multiWaveHeader?.gradientAngle ?: 0 + seekVelocity?.progress = ((multiWaveHeader?.velocity ?: 1f) * 10).toInt() + seekAlpha?.progress = ((multiWaveHeader?.colorAlpha ?: 1f) * 100).toInt() + seekProgress?.progress = ((multiWaveHeader?.progress ?: 1f) * 100).toInt() + seekWave?.progress = ((multiWaveHeader?.waveHeight + ?: 0) / Resources.getSystem().displayMetrics.density).toInt() + checkBoxRunning?.isChecked = multiWaveHeader?.isRunning ?: false + checkBoxDirection?.isChecked = multiWaveHeader?.scaleY == -1f + + seekWave?.setOnProgressChangeListener(this) + seekAngle?.setOnProgressChangeListener(this) + seekVelocity?.setOnProgressChangeListener(this) + seekProgress?.setOnProgressChangeListener(this) + seekAlpha?.setOnProgressChangeListener(this) + seekNumber?.setOnProgressChangeListener(this) + checkBoxRunning?.setOnCheckedChangeListener { _, value -> if (value) { - multiWaveHeader.start() + multiWaveHeader?.start() } else { - multiWaveHeader.stop() + multiWaveHeader?.stop() } } - checkBoxDirection.setOnCheckedChangeListener{_,value-> - multiWaveHeader.scaleY = if (value) -1f else 1f + checkBoxDirection?.setOnCheckedChangeListener { _, value -> + multiWaveHeader?.scaleY = if (value) -1f else 1f context?.also { - toolbar.setBackgroundColor(if (value) ContextCompat.getColor(it, R.color.colorPrimary) else 0) + toolbar?.setBackgroundColor( + if (value) ContextCompat.getColor( + it, + R.color.colorPrimary + ) else 0 + ) } } - sliderStartColor.addOnColorListener(object : OnColorListener{ + sliderStartColor?.addOnColorListener(object : OnColorListener { override fun onColorChanged(color: Int) { onColorSelected(color) } + override fun onColorSelected(color: Int) { - multiWaveHeader.startColor = color + multiWaveHeader?.startColor = color } }) - sliderCloseColor.addOnColorListener(object : OnColorListener{ + sliderCloseColor?.addOnColorListener(object : OnColorListener { override fun onColorChanged(color: Int) { onColorSelected(color) } + override fun onColorSelected(color: Int) { - multiWaveHeader.closeColor = color + multiWaveHeader?.closeColor = color } }) - radioGroup.setOnCheckedChangeListener { _, checkedId -> + radioGroup?.setOnCheckedChangeListener { _, checkedId -> when (checkedId) { - R.id.radioRect -> multiWaveHeader.shape = ShapeType.Rect - R.id.radioOval -> multiWaveHeader.shape = ShapeType.Oval - R.id.radioRoundRect -> multiWaveHeader.shape = ShapeType.RoundRect + R.id.radioRect -> multiWaveHeader?.shape = ShapeType.Rect + R.id.radioOval -> multiWaveHeader?.shape = ShapeType.Oval + R.id.radioRoundRect -> multiWaveHeader?.shape = ShapeType.RoundRect } } @@ -91,10 +125,10 @@ class WaveConsoleFragment : androidx.fragment.app.Fragment(), DiscreteSeekBar.On override fun onProgressChanged(seekBar: DiscreteSeekBar, value: Int, fromUser: Boolean) { when (seekBar) { - seekProgress -> multiWaveHeader.progress = 1f * value / 100 - seekVelocity -> multiWaveHeader.velocity = 1f * value / 10 - seekAlpha -> multiWaveHeader.colorAlpha = 1f * value / 100 - seekAngle -> multiWaveHeader.gradientAngle = value + seekProgress -> multiWaveHeader?.progress = 1f * value / 100 + seekVelocity -> multiWaveHeader?.velocity = 1f * value / 10 + seekAlpha -> multiWaveHeader?.colorAlpha = 1f * value / 100 + seekAngle -> multiWaveHeader?.gradientAngle = value } } @@ -103,7 +137,7 @@ class WaveConsoleFragment : androidx.fragment.app.Fragment(), DiscreteSeekBar.On override fun onStopTrackingTouch(seekBar: DiscreteSeekBar) { if (seekWave == seekBar) { - multiWaveHeader.waveHeight = seekBar.progress + multiWaveHeader?.waveHeight = seekBar.progress } else if (seekNumber == seekBar) { if (seekBar.progress == 2) { /** @@ -111,10 +145,13 @@ class WaveConsoleFragment : androidx.fragment.app.Fragment(), DiscreteSeekBar.On * offsetX offsetY scaleX scaleY velocity(dp/s) * 水平偏移量 竖直偏移量 水平拉伸比例 竖直拉伸比例 速度 */ - multiWaveHeader.setWaves("0,0,1,1,25\n90,0,1,1,25") + multiWaveHeader?.setWaves("0,0,1,1,25\n90,0,1,1,25") } else { - val waves = "70,25,1.4,1.4,-26\n100,5,1.4,1.2,15\n420,0,1.15,1,-10\n520,10,1.7,1.5,20\n220,0,1,1,-15".split("\n") - multiWaveHeader.setWaves(waves.subList(0, seekBar.progress).joinToString("\n")) + val waves = + "70,25,1.4,1.4,-26\n100,5,1.4,1.2,15\n420,0,1.15,1,-10\n520,10,1.7,1.5,20\n220,0,1,1,-15".split( + "\n" + ) + multiWaveHeader?.setWaves(waves.subList(0, seekBar.progress).joinToString("\n")) } } } diff --git a/build.gradle b/build.gradle index 35cec7f..67ccc2f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,25 +1,47 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.41' + ext.kotlin_version = '1.8.10' repositories { google() - jcenter() + mavenCentral() + maven { url "https://maven.google.com" } + maven { url 'https://jitpack.io' } + maven { url "https://repo.grails.org/grails/core/" } + maven { + url "https://plugins.gradle.org/m2/" + } + maven { + url 'https://dl.bintray.com/novoda-oss/snapshots/' + } } dependencies { - classpath 'com.android.tools.build:gradle:3.4.2' +// classpath 'com.android.tools.build:gradle:3.4.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.android.tools.build:gradle:8.6.1' + classpath 'com.novoda:bintray-release:0.9.2' + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files - classpath 'com.novoda:bintray-release:0.9.1' +// classpath 'com.novoda:bintray-release:0.9.1' } } allprojects { repositories { google() - jcenter() + mavenCentral() + maven { url "https://maven.google.com" } + maven { url 'https://jitpack.io' } + maven { url "https://repo.grails.org/grails/core/" } + maven { + url "https://plugins.gradle.org/m2/" + } + maven { + url 'https://dl.bintray.com/novoda-oss/snapshots/' + } } tasks.withType(Javadoc) { options { @@ -34,30 +56,30 @@ task clean(type: Delete) { delete rootProject.buildDir } - -def file = 'local.properties' -if (new File(file).exists()) { - Properties properties = new Properties() - properties.load(new FileInputStream(file)) - if ('true' == properties['bintray.enable']) { - subprojects { - if (name == ("library")) { - afterEvaluate { - publish { - groupId = group - desc = description - publishVersion = version - artifactId = SMART_ARTIFACT - userOrg = properties['bintray.user'] - bintrayKey = properties['bintray.key'] - bintrayUser = properties['bintray.user'] - dryRun = properties['bintray.dryRun'] ?: 'false' - website = "https://github.com/scwang90/${rootProject.name}" - } - } - apply plugin: 'com.novoda.bintray-release' - } - } - - } -} \ No newline at end of file +// +//def file = 'local.properties' +//if (new File(file).exists()) { +// Properties properties = new Properties() +// properties.load(new FileInputStream(file)) +// if ('true' == properties['bintray.enable']) { +// subprojects { +// if (name == ("library")) { +// afterEvaluate { +// publish { +// groupId = group +// desc = description +// publishVersion = version +// artifactId = SMART_ARTIFACT +// userOrg = properties['bintray.user'] +// bintrayKey = properties['bintray.key'] +// bintrayUser = properties['bintray.user'] +// dryRun = properties['bintray.dryRun'] ?: 'false' +// website = "https://github.com/scwang90/${rootProject.name}" +// } +// } +// apply plugin: 'com.novoda.bintray-release' +// } +// } +// +// } +//} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ef3e366..5e457d4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Apr 15 02:38:53 CST 2018 +#Sat Sep 28 23:38:03 IST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip diff --git a/library/build.gradle b/library/build.gradle index 490a552..a9cac44 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,12 +1,38 @@ apply plugin: 'com.android.library' -apply plugin: 'maven' +apply plugin: 'maven-publish' + +publishing { + publications { + maven(MavenPublication) { + groupId = 'com.github.karthikkompelli' + artifactId = 'MultiWaveHeader' + version = "1.0.0" + pom { + description = 'MultiWaveHeader' + } + } + } + repositories { + google() + mavenCentral() + maven { url "https://maven.google.com" } + maven { url 'https://jitpack.io' } + maven { url "https://repo.grails.org/grails/core/" } + maven { + url "https://plugins.gradle.org/m2/" + } + maven { + url 'https://dl.bintray.com/novoda-oss/snapshots/' + } + } +} android { - compileSdkVersion 28 + compileSdkVersion 34 defaultConfig { minSdkVersion 12 - targetSdkVersion 28 + targetSdkVersion 34 versionCode 1 versionName "1.0" @@ -20,7 +46,14 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +// kotlinOptions { +// jvmTarget '1.8' +// } + namespace 'com.scwang.wave.library' } dependencies { @@ -38,10 +71,10 @@ group = SMART_GROUP version = SMART_VERSION description = 'A wave view of android' -uploadArchives { - repositories.mavenDeployer { - repository(url: uri('../repo')) - pom.artifactId = SMART_ARTIFACT - } -} +//uploadArchives { +// repositories.mavenDeployer { +// repository(url: uri('../repo')) +// pom.artifactId = SMART_ARTIFACT +// } +//} diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml index 0575388..cc947c5 100644 --- a/library/src/main/AndroidManifest.xml +++ b/library/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/library/src/main/java/com/scwang/wave/MultiWaveHeader.java b/library/src/main/java/com/scwang/wave/MultiWaveHeader.java index a6ca03a..e215504 100644 --- a/library/src/main/java/com/scwang/wave/MultiWaveHeader.java +++ b/library/src/main/java/com/scwang/wave/MultiWaveHeader.java @@ -26,6 +26,8 @@ import static java.lang.Float.parseFloat; +import com.scwang.wave.library.R; + /** * 多重水波纹 * Created by SCWANG on 2017/12/11.