的
This commit is contained in:
@@ -0,0 +1 @@
|
||||
/build
|
||||
@@ -0,0 +1,94 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
apply from: 'signConfig.gradle'
|
||||
|
||||
println "测试打印...${widgetcase.keyAlias}"
|
||||
|
||||
android {
|
||||
compileSdkVersion setup.compileSdk
|
||||
buildToolsVersion = setup.buildTools
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.doyou.cvc"
|
||||
minSdkVersion setup.minSdk
|
||||
targetSdkVersion setup.targetSdk
|
||||
versionCode release.versionCode
|
||||
versionName release.versionName
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = '1.8'
|
||||
targetCompatibility = '1.8'
|
||||
}
|
||||
|
||||
|
||||
signingConfigs {
|
||||
autoSigning {
|
||||
// 加载properties
|
||||
// def properties = new Properties()
|
||||
// def inputStream = project.rootProject.file('local.properties').newDataInputStream()
|
||||
// properties.load(inputStream)
|
||||
//
|
||||
// keyAlias 'widgetcase'
|
||||
// keyPassword properties.getProperty('certificates.password')
|
||||
// storeFile file('../widgetcase')
|
||||
// storePassword properties.getProperty('certificates.password')
|
||||
|
||||
keyAlias widgetcase.keyAlias
|
||||
keyPassword widgetcase.signPwd
|
||||
storeFile file(widgetcase.keyStoreFileDir)
|
||||
storePassword widgetcase.signPwd
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled true
|
||||
multiDexEnabled true
|
||||
zipAlignEnabled true
|
||||
signingConfig signingConfigs.autoSigning
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
applicationVariants.all { variant ->
|
||||
variant.outputs.each { output ->
|
||||
// variant.packageApplicationProvider.get().outputDirectory = new File(project.rootDir.absolutePath + "/apk")
|
||||
def outName = "WidgetCase"
|
||||
def fileName = outName + '-v' + variant.versionName + '-' + variant.buildType.name + '.apk'
|
||||
output.outputFileName = fileName
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
repositories { // 正确引用aar:https://blog.csdn.net/qq_35522272/article/details/70214962
|
||||
flatDir {
|
||||
dirs 'libs'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${versions.kotlin}"
|
||||
implementation "androidx.appcompat:appcompat:${versions.appcompat}"
|
||||
implementation "androidx.annotation:annotation:${versions.appcompat}"
|
||||
implementation "androidx.constraintlayout:constraintlayout:${versions.constraintLayout}"
|
||||
implementation 'com.google.android:flexbox:1.1.0'
|
||||
implementation 'com.android.support:design:28.0.0'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'com.google.android.material:material:1.0.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test:runner:1.2.0'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
||||
|
||||
implementation project(':hawkeye_widget')
|
||||
implementation "com.faithhb:toolslib:${outer.toolslib}"
|
||||
// aar中依赖的库,主项目也必须依赖,因为aar中依赖的库不会被打进aar包中
|
||||
// implementation 'com.github:widgetcase:1.0.4'
|
||||
// implementation(name: 'hawkeye_widget-release', ext: 'aar')
|
||||
}
|
||||
Binary file not shown.
Vendored
+21
@@ -0,0 +1,21 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
@@ -0,0 +1,9 @@
|
||||
// 引用自定义插件
|
||||
apply plugin: 'com.doyou.widgetcase'
|
||||
// 配置插件属性
|
||||
widgetcase {
|
||||
keyAlias 'widgetcase'
|
||||
signPwd '2019888'
|
||||
keyStoreFileDir '../widgetcase'
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.doyou.cvc
|
||||
|
||||
import android.support.test.InstrumentationRegistry
|
||||
import android.support.test.runner.AndroidJUnit4
|
||||
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ExampleInstrumentedTest {
|
||||
@Test
|
||||
fun useAppContext() {
|
||||
// Context of the app under test.
|
||||
val appContext = InstrumentationRegistry.getTargetContext()
|
||||
assertEquals("com.doyou.cvc", appContext.packageName)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.doyou.cvc">
|
||||
|
||||
<application
|
||||
android:name=".WidgetApplication"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
<activity
|
||||
android:name=".activity.MenuMainActivity"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".activity.ImgTxtMixtureActivity" />
|
||||
<activity android:name=".activity.RingViewActivity" />
|
||||
<activity android:name=".activity.taperchart.TaperChartActivity" />
|
||||
<activity android:name=".activity.taperchart.ContrastActivity" />
|
||||
<activity android:name=".activity.taperchart.ScrollTaperChartActivity" />
|
||||
<activity android:name=".activity.GradientLineActivity" />
|
||||
<activity android:name=".activity.LegendRingViewActivity" />
|
||||
<activity android:name=".activity.CircleProgressBarViewActivity" />
|
||||
<activity android:name=".activity.ShadowProBarActivity" />
|
||||
<activity android:name=".activity.GradientProBarScaleActivity" />
|
||||
<activity android:name=".activity.HalfCircleProViewActivity" />
|
||||
<activity android:name=".activity.MatrixViewActivity" />
|
||||
<activity android:name=".activity.GradientProBarActivity" />
|
||||
<activity android:name=".activity.ringview.DoubleTxtActivity" />
|
||||
<activity android:name=".activity.ringview.LegendActivity" />
|
||||
<activity android:name=".activity.HorScrollSelecteViewActivity" />
|
||||
<activity android:name=".activity.HorProBarActivity" />
|
||||
<activity android:name=".activity.SectionProBarActivity" />
|
||||
<activity android:name=".activity.WaveViewActivity" />
|
||||
<activity android:name=".activity.colorfilter.ColorMainActivity" />
|
||||
<activity android:name=".activity.colorfilter.ColorMatrixActivity" />
|
||||
<activity android:name=".activity.colorfilter.ColorHueActivity" />
|
||||
<activity android:name=".activity.touch.RefreshViewActivity" />
|
||||
<activity android:name=".activity.timeruler.TimeRulerActivity" />
|
||||
<activity android:name=".activity.animator.BmpOverturnActivity" />
|
||||
<activity
|
||||
android:name=".activity.CircleBtnActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".activity.touch.CustomScrollViewActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".activity.sys.viewpager.ViewPagerTransformerActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.doyou.cvc
|
||||
|
||||
import android.app.Application
|
||||
|
||||
import com.dongni.tools.Common
|
||||
|
||||
class WidgetApplication : Application() {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
Common.init(this, true)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.content.res.Configuration
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.dongni.tools.Common
|
||||
import com.doyou.cv.callback.Rotatable
|
||||
import com.doyou.cvc.R
|
||||
import com.doyou.cvc.activity.listener.OrientationListener
|
||||
import kotlinx.android.synthetic.main.activity_circlebtn.*
|
||||
|
||||
class CircleBtnActivity : AppCompatActivity(),OrientationListener.Callback {
|
||||
|
||||
private val STROKE_WIDTH = 2
|
||||
private var mOrientationListener:OrientationListener? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_circlebtn)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_circlebutton_view)
|
||||
|
||||
mOrientationListener = OrientationListener(
|
||||
applicationContext)
|
||||
mOrientationListener!!.callback = this
|
||||
mOrientationListener!!.enable() // 必须要调用此方法,不然旋转监听无效
|
||||
|
||||
videoCb.setStroke(STROKE_WIDTH,resources.getColor(R.color.default_bg_normal_color))
|
||||
videoCb.setBackgroundDisabledColor(resources.getColor(R.color.bg_disabled_color))
|
||||
videoCb.setImageResource(R.mipmap.call_answer_video)
|
||||
|
||||
audioCb.setStroke(STROKE_WIDTH,resources.getColor(R.color.default_bg_normal_color))
|
||||
audioCb.setBackgroundDisabledColor(resources.getColor(R.color.bg_normal_color))
|
||||
audioCb.setImageResource(R.mipmap.call_answer_audio)
|
||||
|
||||
cameraCb.setStroke(STROKE_WIDTH,resources.getColor(R.color.default_bg_normal_color))
|
||||
cameraCb.setBackgroundDisabledColor(resources.getColor(R.color.bg_pressed_color))
|
||||
cameraCb.setImageResource(R.mipmap.call_camera_on_normal)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
mOrientationListener!!.disable()
|
||||
}
|
||||
|
||||
override fun orientationChanged(orientation: Int, previousOrientation: Int) {
|
||||
Common.log_d("回调", "orientationChanged:orientation = $orientation->previousOrientation = $previousOrientation")
|
||||
updateButtons(orientation)
|
||||
}
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
super.onConfigurationChanged(newConfig)
|
||||
Common.log_d("旋转", "onConfigurationChanged")
|
||||
}
|
||||
|
||||
private fun updateButtons(orientation: Int){
|
||||
var indicators = arrayOf<Rotatable>(videoCb,audioCb,cameraCb)
|
||||
for (indicator in indicators) {
|
||||
if (indicator != null) {
|
||||
indicator!!.setOrientation(orientation * 90, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_circle_progress_barview.*
|
||||
|
||||
class CircleProgressBarViewActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_circle_progress_barview)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_circle_progressbar_view)
|
||||
|
||||
oneCpbv.setProgressWithAnimation(0 / 1f)
|
||||
oneCpbv.setTargetNum(2345.00f.toString())
|
||||
|
||||
twoCpbv.setProgressWithAnimation(249.0f)
|
||||
twoCpbv.setTargetNum(2345.00f.toString())
|
||||
|
||||
threeCpbv.setProgressWithAnimation(49.4f)
|
||||
threeCpbv.setCenterProgressTextColor(Color.rgb(88,181,250))
|
||||
threeCpbv.setTargetNum(2345.00f.toString())
|
||||
|
||||
setFinishBtn.setOnClickListener {
|
||||
threeCpbv.setProgressWithAnimation(249.4f)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cv.widget.GradientLine
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_gradientline.*
|
||||
|
||||
class GradientLineActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_gradientline)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_gradient_line)
|
||||
|
||||
gLineUp.postDelayed({
|
||||
gLineUp.setAnim(true)
|
||||
gLineUp.setMode(GradientLine.LineMode.DOWN)
|
||||
},500)
|
||||
|
||||
gLineFlat.setAnim(true)
|
||||
gLineFlat.postDelayed({
|
||||
gLineFlat.setMode(GradientLine.LineMode.FLAT)
|
||||
},500)
|
||||
|
||||
gLineDown.postDelayed({
|
||||
gLineDown.setAnim(true,640)
|
||||
gLineDown.setMode(GradientLine.LineMode.UP)
|
||||
},500)
|
||||
|
||||
|
||||
gLineBtn.setOnClickListener {
|
||||
gLineUp.postDelayed({
|
||||
gLineUp.handleStartAnim()
|
||||
}, 120)
|
||||
|
||||
|
||||
gLineFlat.handleStartAnim()
|
||||
|
||||
gLineDown.postDelayed({
|
||||
gLineDown.handleStartAnim()
|
||||
}, 120)
|
||||
}
|
||||
|
||||
gLineAgain.setAnim(true,640)
|
||||
gLineAgain.setMode(GradientLine.LineMode.FLAT)
|
||||
var isTure = false
|
||||
gLineBtn2.setOnClickListener {
|
||||
if (isTure){
|
||||
isTure = false
|
||||
gLineAgain.setMode(GradientLine.LineMode.FLAT)
|
||||
gLineAgain.handleStartAnim()
|
||||
}else{
|
||||
isTure = true
|
||||
gLineAgain.setMode(GradientLine.LineMode.UP)
|
||||
gLineAgain.handleStartAnim()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.manager.DispatchManager
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_gradientgrobar.*
|
||||
import java.util.*
|
||||
|
||||
class GradientProBarActivity : AppCompatActivity() {
|
||||
|
||||
private var mRandom: Random = Random()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_gradientgrobar)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_gradient_probar)
|
||||
|
||||
refeshPro.setOnClickListener {
|
||||
circlePro.setValue(mRandom.nextFloat() * circlePro.maxValue)
|
||||
}
|
||||
showScalebtn.setOnClickListener {
|
||||
DispatchManager.showAct(this, GradientProBarScaleActivity::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_gradientgrobar_scale.*
|
||||
import java.util.*
|
||||
|
||||
class GradientProBarScaleActivity : AppCompatActivity() {
|
||||
|
||||
private var mRandom: Random = Random()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_gradientgrobar_scale)
|
||||
gpb.setPercent(30)
|
||||
|
||||
refeshtn.setOnClickListener {
|
||||
gpb.setPercent(mRandom.nextInt(100))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_halfcircle_proview.*
|
||||
|
||||
class HalfCircleProViewActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_halfcircle_proview)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_half_circle_proview)
|
||||
hcpv.setProgress(0f)
|
||||
hcpv.setGradientColors(intArrayOf(Color.rgb(255, 196, 0), Color.rgb(255, 105, 83)))
|
||||
hcpv.postDelayed({
|
||||
hcpv.setProgress(88f)
|
||||
}, 320)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_horprobar.*
|
||||
import java.util.*
|
||||
|
||||
class HorProBarActivity : AppCompatActivity() {
|
||||
private var mRandom: Random = Random()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_horprobar)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_hor_probar)
|
||||
hbBar1.setCurrentProgress(0f)
|
||||
hbBar2.setCurrentProgress(52.3f)
|
||||
hbBar3.setCurrentProgress(122.5f)
|
||||
|
||||
refeshBtn.setOnClickListener {
|
||||
hbBar1.setCurrentProgress(mRandom.nextFloat() * 100)
|
||||
hbBar2.setCurrentProgress(mRandom.nextFloat() * 100)
|
||||
hbBar3.setCurrentProgress(mRandom.nextFloat() * 200)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_horscroll_selectedview.*
|
||||
|
||||
/**
|
||||
* 带有水平滑动的峰值图
|
||||
* @autor hongbing
|
||||
* @date 2019/3/25
|
||||
*/
|
||||
class HorScrollSelecteViewActivity : AppCompatActivity() {
|
||||
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_horscroll_selectedview)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_hor_scroll_selected_view)
|
||||
|
||||
var list:MutableList<String> = ArrayList()
|
||||
list.add("abc")
|
||||
list.add("def")
|
||||
list.add("ccc")
|
||||
list.add("ddd")
|
||||
list.add("eee")
|
||||
list.add("fff")
|
||||
list.add("ggg")
|
||||
hssv.setData(list)
|
||||
|
||||
// hssv.setDefSelectIndex(0)
|
||||
|
||||
lftTv.setOnClickListener {
|
||||
hssv.setAnLeftOffset()
|
||||
}
|
||||
|
||||
rgtTv.setOnClickListener {
|
||||
hssv.setAnRightOffset()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
|
||||
class ImgTxtMixtureActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_imgtxt_mixture)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_imgtxt_mixture)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.dongni.tools.Common
|
||||
import com.doyou.cv.bean.CircleBean
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_legend_ringview.*
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class LegendRingViewActivity : AppCompatActivity() {
|
||||
|
||||
private val percentFormat = DecimalFormat("#.##%")
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_legend_ringview)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_legend_ring_view)
|
||||
syncRingViewData()
|
||||
}
|
||||
|
||||
private fun syncRingViewData() {
|
||||
lrv_one.setCircleColors(Color.BLACK, Color.CYAN, Color.GREEN, Color.YELLOW)
|
||||
var valueSum = 60
|
||||
var mList: MutableList<CircleBean> = ArrayList()
|
||||
var cb: CircleBean
|
||||
val rvMax = lrv_one.max
|
||||
var startPro = 0f
|
||||
val size = 3
|
||||
for (i in 0 until size) { // 计算数值占圆环的比例
|
||||
cb = CircleBean()
|
||||
cb.startPro = startPro
|
||||
|
||||
if (i == 0){
|
||||
cb.endPro = (12f / valueSum) * rvMax
|
||||
}else if (i == 1){
|
||||
cb.endPro = (32f / valueSum) * rvMax
|
||||
}else{
|
||||
cb.endPro = (16f / valueSum) * rvMax
|
||||
}
|
||||
|
||||
cb.centerPro = startPro + cb.endPro / 2
|
||||
startPro += cb.endPro
|
||||
Common.log_d("201811091554", cb.toString())
|
||||
mList.add(cb)
|
||||
}
|
||||
lrv_one.setData(mList)
|
||||
|
||||
var labels: MutableList<String> = ArrayList()
|
||||
labels.add("项链")
|
||||
labels.add("戒指")
|
||||
labels.add("男你拿")
|
||||
// labels.add("脚链")
|
||||
|
||||
lrv_two.setData(mList)
|
||||
|
||||
lrv_three.isOpenDebug(true)
|
||||
lrv_three.setCircleColors(Color.BLACK, Color.CYAN, Color.GREEN, Color.YELLOW)
|
||||
lrv_three.setData(mList, labels)
|
||||
|
||||
btn.setOnClickListener {
|
||||
labels.clear()
|
||||
labels.add("嗷嗷嗷")
|
||||
labels.add("嘿嘿嘿")
|
||||
// labels.add("哈哈")
|
||||
labels.add("嘿嘿嘿")
|
||||
|
||||
lrv_three.setData(mList, labels)
|
||||
}
|
||||
|
||||
|
||||
var mList1: MutableList<CircleBean> = ArrayList()
|
||||
for (i in 0 until 4) { // 计算数值占圆环的比例
|
||||
cb = CircleBean()
|
||||
cb.startPro = startPro
|
||||
|
||||
if (i == 0){
|
||||
cb.endPro = (12f / valueSum) * rvMax
|
||||
}else if (i == 1){
|
||||
cb.endPro = (32f / valueSum) * rvMax
|
||||
}else if(i == 2){
|
||||
cb.endPro = (16f / valueSum) * rvMax
|
||||
}else{
|
||||
cb.endPro = (8f / valueSum) * rvMax
|
||||
}
|
||||
|
||||
cb.centerPro = startPro + cb.endPro / 2
|
||||
startPro += cb.endPro
|
||||
Common.log_d("201811091554", cb.toString())
|
||||
mList1.add(cb)
|
||||
}
|
||||
|
||||
var labels1: MutableList<String> = ArrayList()
|
||||
labels1.add("项链")
|
||||
labels1.add("戒指")
|
||||
labels1.add("男你拿")
|
||||
labels1.add("嘿嘿")
|
||||
|
||||
lrv_left.setData(mList1, labels1)
|
||||
lrv_right.setData(mList, labels)
|
||||
// lrv_right.setData(null, null)
|
||||
|
||||
}
|
||||
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
|
||||
class MatrixViewActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_matrix_view)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_matrix_view)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.ActionBarDrawerToggle
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.view.GravityCompat
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import com.dongni.tools.EmptyUtils
|
||||
import com.dongni.tools.ToastUtils
|
||||
import com.doyou.cvc.R
|
||||
import com.doyou.cvc.activity.animator.BmpOverturnActivity
|
||||
import com.doyou.cvc.activity.colorfilter.ColorMainActivity
|
||||
import com.doyou.cvc.activity.sys.viewpager.ViewPagerTransformerActivity
|
||||
import com.doyou.cvc.activity.taperchart.ScrollTaperChartActivity
|
||||
import com.doyou.cvc.activity.taperchart.TaperChartActivity
|
||||
import com.doyou.cvc.activity.timeruler.TimeRulerActivity
|
||||
import com.doyou.cvc.activity.touch.CustomScrollViewActivity
|
||||
import com.doyou.cvc.activity.touch.RefreshViewActivity
|
||||
import com.doyou.cvc.manager.DispatchManager
|
||||
import com.doyou.cvc.utils.AppUtils
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import com.google.android.material.navigation.NavigationView
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import kotlinx.android.synthetic.main.content_menu_main.*
|
||||
|
||||
class MenuMainActivity : AppCompatActivity(), View.OnClickListener, NavigationView.OnNavigationItemSelectedListener {
|
||||
|
||||
/**
|
||||
* 开源库地址
|
||||
*/
|
||||
private val WIDGETCASE_GITHUB_URL = "https://github.com/faith-hb/WidgetCase"
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_menu_main)
|
||||
// 避免通过系统安装器打开app,进入到子页面,点击home键导致的启动页重启的问题
|
||||
if (!isTaskRoot && intent != null) {
|
||||
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER)
|
||||
&& intent.action == Intent.ACTION_MAIN) {
|
||||
finish()
|
||||
return
|
||||
}
|
||||
}
|
||||
val toolbar: Toolbar = findViewById(R.id.toolbar)
|
||||
setSupportActionBar(toolbar)
|
||||
|
||||
val fab: FloatingActionButton = findViewById(R.id.fab)
|
||||
fab.setOnClickListener { view ->
|
||||
Snackbar.make(view, "您好,有问题可以右滑查看我的联系方式或在GitHub上提issue哦", Snackbar.LENGTH_LONG)
|
||||
.setAction("Action", null).show()
|
||||
}
|
||||
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
|
||||
val navView: NavigationView = findViewById(R.id.nav_view)
|
||||
val toggle = ActionBarDrawerToggle(
|
||||
this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
|
||||
drawerLayout.addDrawerListener(toggle)
|
||||
toggle.syncState()
|
||||
|
||||
navView.setNavigationItemSelectedListener(this)
|
||||
initListener()
|
||||
}
|
||||
|
||||
private fun initListener() {
|
||||
selPtoBarTv.setOnClickListener(this)
|
||||
imgTxtTv.setOnClickListener(this)
|
||||
ringvTv.setOnClickListener(this)
|
||||
tcTv.setOnClickListener(this)
|
||||
htcTv.setOnClickListener(this)
|
||||
gradientTv.setOnClickListener(this)
|
||||
lrvTv.setOnClickListener(this)
|
||||
cpbvTv.setOnClickListener(this)
|
||||
spbTv.setOnClickListener(this)
|
||||
hcpvTv.setOnClickListener(this)
|
||||
matrixTv.setOnClickListener(this)
|
||||
gpbTv.setOnClickListener(this)
|
||||
hssvTv.setOnClickListener(this)
|
||||
horTv.setOnClickListener(this)
|
||||
waveTv.setOnClickListener(this)
|
||||
colorMainTv.setOnClickListener(this)
|
||||
refreshTv.setOnClickListener(this)
|
||||
timeRulerTv.setOnClickListener(this)
|
||||
circleBtnTv.setOnClickListener(this)
|
||||
ctmSvTv.setOnClickListener(this)
|
||||
vpTransTv.setOnClickListener(this)
|
||||
imgOverturnTv.setOnClickListener(this)
|
||||
}
|
||||
|
||||
private fun copyContent(str:String?){
|
||||
if (EmptyUtils.isNotEmpty(str)){
|
||||
var cm = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
var clipData = ClipData.newPlainText("Label",str)
|
||||
cm.primaryClip = clipData
|
||||
}
|
||||
}
|
||||
|
||||
override fun onClick(v: View?) {
|
||||
when (v?.id) {
|
||||
R.id.selPtoBarTv -> {
|
||||
DispatchManager.showAct(this, SectionProBarActivity::class.java)
|
||||
}
|
||||
R.id.imgTxtTv -> {
|
||||
DispatchManager.showAct(this, ImgTxtMixtureActivity::class.java)
|
||||
}
|
||||
R.id.ringvTv -> {
|
||||
DispatchManager.showAct(this, RingViewActivity::class.java)
|
||||
}
|
||||
R.id.tcTv -> {
|
||||
DispatchManager.showAct(this, TaperChartActivity::class.java)
|
||||
}
|
||||
R.id.htcTv -> {
|
||||
DispatchManager.showAct(this, ScrollTaperChartActivity::class.java)
|
||||
}
|
||||
R.id.gradientTv -> {
|
||||
DispatchManager.showAct(this, GradientLineActivity::class.java)
|
||||
}
|
||||
R.id.lrvTv -> {
|
||||
DispatchManager.showAct(this, LegendRingViewActivity::class.java)
|
||||
}
|
||||
R.id.cpbvTv -> {
|
||||
DispatchManager.showAct(this, CircleProgressBarViewActivity::class.java)
|
||||
}
|
||||
R.id.spbTv -> {
|
||||
DispatchManager.showAct(this, ShadowProBarActivity::class.java)
|
||||
}
|
||||
R.id.hcpvTv -> {
|
||||
DispatchManager.showAct(this, HalfCircleProViewActivity::class.java)
|
||||
}
|
||||
R.id.matrixTv -> {
|
||||
DispatchManager.showAct(this, MatrixViewActivity::class.java)
|
||||
}
|
||||
R.id.gpbTv -> {
|
||||
DispatchManager.showAct(this, GradientProBarActivity::class.java)
|
||||
}
|
||||
R.id.hssvTv -> {
|
||||
DispatchManager.showAct(this, HorScrollSelecteViewActivity::class.java)
|
||||
}
|
||||
R.id.horTv -> {
|
||||
DispatchManager.showAct(this, HorProBarActivity::class.java)
|
||||
}
|
||||
R.id.waveTv -> {
|
||||
DispatchManager.showAct(this, WaveViewActivity::class.java)
|
||||
}
|
||||
R.id.colorMainTv -> {
|
||||
DispatchManager.showAct(this, ColorMainActivity::class.java)
|
||||
}
|
||||
R.id.refreshTv -> {
|
||||
DispatchManager.showAct(this, RefreshViewActivity::class.java)
|
||||
}
|
||||
R.id.timeRulerTv -> {
|
||||
DispatchManager.showAct(this, TimeRulerActivity::class.java)
|
||||
}
|
||||
R.id.circleBtnTv -> {
|
||||
DispatchManager.showAct(this, CircleBtnActivity::class.java)
|
||||
}
|
||||
R.id.ctmSvTv -> {
|
||||
DispatchManager.showAct(this, CustomScrollViewActivity::class.java)
|
||||
}
|
||||
R.id.vpTransTv -> {
|
||||
DispatchManager.showAct(this, ViewPagerTransformerActivity::class.java)
|
||||
}
|
||||
R.id.imgOverturnTv ->{
|
||||
DispatchManager.showAct(this, BmpOverturnActivity::class.java)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
|
||||
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
|
||||
drawerLayout.closeDrawer(GravityCompat.START)
|
||||
} else {
|
||||
super.onBackPressed()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
menuInflater.inflate(R.menu.menu_main, menu)
|
||||
return false // fasle隐藏menu
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
return when (item.itemId) {
|
||||
R.id.action_settings -> true
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onNavigationItemSelected(item: MenuItem): Boolean {
|
||||
// Handle navigation view item clicks here.
|
||||
when (item.itemId) {
|
||||
R.id.nav_wechat -> {
|
||||
// Handle the camera action
|
||||
AppUtils.copyContent(this,"faith-hb")
|
||||
ToastUtils.showLongToast(this, "老铁,加我微信能拉近我们的距离(^_^)")
|
||||
}
|
||||
R.id.nav_qq -> {
|
||||
AppUtils.copyContent(this,"907167515")
|
||||
ToastUtils.showLongToast(this, "哥们,不加好友怎么聊ಠ_ಠ")
|
||||
}
|
||||
// R.id.nav_slideshow -> {
|
||||
//
|
||||
// }
|
||||
// R.id.nav_tools -> {
|
||||
//
|
||||
// }
|
||||
R.id.nav_share -> {
|
||||
ToastUtils.showShortToast(this,"敬请期待...")
|
||||
}
|
||||
R.id.nav_github -> {
|
||||
AppUtils.openUrlByBrowser(this,WIDGETCASE_GITHUB_URL)
|
||||
ToastUtils.showLongToast(this, "亲,给星星的银都是爷凸^-^凸")
|
||||
}
|
||||
}
|
||||
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
|
||||
drawerLayout.closeDrawer(GravityCompat.START)
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.dongni.tools.Common
|
||||
import com.dongni.tools.ToastUtils
|
||||
import com.doyou.cv.bean.CircleBean
|
||||
import com.doyou.cvc.R
|
||||
import com.doyou.cvc.activity.ringview.DoubleTxtActivity
|
||||
import com.doyou.cvc.activity.ringview.LegendActivity
|
||||
import kotlinx.android.synthetic.main.activity_ringview.*
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class RingViewActivity : AppCompatActivity() {
|
||||
|
||||
private val percentFormat = DecimalFormat("#.##%")
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_ringview)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_ring_view)
|
||||
syncRingViewData()
|
||||
refeshBtn.setOnClickListener {
|
||||
ToastUtils.showShortToast(applicationContext,"刷新下")
|
||||
ringv3.setCenterTxtColor(Color.rgb(255,124,12))
|
||||
showRingView3()
|
||||
}
|
||||
doubleTxtBtn.setOnClickListener {
|
||||
startActivity(Intent(this,DoubleTxtActivity::class.java))
|
||||
}
|
||||
legendBtn.setOnClickListener {
|
||||
startActivity(Intent(this,LegendActivity::class.java))
|
||||
}
|
||||
}
|
||||
|
||||
private fun syncRingViewData() {
|
||||
|
||||
ringv.showDebugView(true)
|
||||
var valueOne = 12
|
||||
var valueTwo = 24
|
||||
var progress = (valueOne / (valueOne + valueTwo).toFloat()) * 100
|
||||
ringv.setData(progress, "第一个".plus(' ').plus(percentFormat.format(progress / 100)),
|
||||
"第二个".plus(' ').plus(percentFormat.format((100 - progress) / 100)))
|
||||
|
||||
|
||||
ringv1.showDebugView(true)
|
||||
var progress1 = (12 / 24.toFloat()) * 100
|
||||
ringv1.setData(progress1, "第三个".plus(' ').plus(percentFormat.format(progress1 / 100)),
|
||||
"第四个".plus(' ').plus(percentFormat.format((100 - progress1) / 100)))
|
||||
ringv1.setListener { label ->
|
||||
ToastUtils.showShortToast(this, label)
|
||||
}
|
||||
|
||||
ringv2.showDebugView(true)
|
||||
var valueSum = 60
|
||||
var mList: MutableList<CircleBean> = ArrayList<CircleBean>()
|
||||
var cb: CircleBean
|
||||
val rvMax = ringv2.max
|
||||
var startPro = 0f
|
||||
val size = 3
|
||||
for (i in 0 until size) { // 计算数值占圆环的比例
|
||||
cb = CircleBean()
|
||||
cb.startPro = startPro
|
||||
|
||||
when (i) {
|
||||
0 -> cb.endPro = (12f / valueSum) * rvMax
|
||||
1 -> cb.endPro = (32f / valueSum) * rvMax
|
||||
else -> cb.endPro = (16f / valueSum) * rvMax
|
||||
}
|
||||
|
||||
cb.centerPro = startPro + cb.endPro / 2
|
||||
cb.desc = "di" + i + "ge"
|
||||
startPro += cb.endPro
|
||||
Common.log_d("201811091554", cb.toString())
|
||||
mList.add(cb)
|
||||
}
|
||||
ringv2.setData(mList)
|
||||
ringv2.setListener { label ->
|
||||
ToastUtils.showShortToast(this, label)
|
||||
}
|
||||
|
||||
showRingView3()
|
||||
showRingView4()
|
||||
}
|
||||
|
||||
// private val COLORS = intArrayOf(
|
||||
// Color.rgb(255, 226, 223),
|
||||
// Color.rgb(255, 195, 187),
|
||||
// Color.rgb(255, 164, 155),
|
||||
// Color.rgb(255, 142, 129),
|
||||
// Color.rgb(255, 104, 89),
|
||||
// Color.rgb(220, 240, 253),
|
||||
// Color.rgb(183, 225, 250),
|
||||
// Color.rgb(148, 211, 250),
|
||||
// Color.rgb(108, 196, 248),
|
||||
// Color.rgb(67, 181, 246)
|
||||
// )
|
||||
private val COLORS = intArrayOf(
|
||||
Color.rgb(88, 181, 250), // a:255
|
||||
Color.rgb(88, 181, 250), // a:215
|
||||
Color.rgb(88, 181, 250), // a:175
|
||||
Color.rgb(88, 181, 250), // a:135
|
||||
Color.rgb(88, 181, 250), // a:95
|
||||
// Color.rgb(88, 181, 250), // a:45
|
||||
|
||||
// 女
|
||||
Color.rgb(255, 105, 83), // a:255
|
||||
Color.rgb(255, 105, 83), // a:215
|
||||
Color.rgb(255, 105, 83), // a:175
|
||||
Color.rgb(255, 105, 83), // a:135
|
||||
Color.rgb(255, 105, 83) // a:95
|
||||
// Color.rgb(255, 105, 83) // a:45)
|
||||
)
|
||||
private val ALPHAS = intArrayOf(
|
||||
255, 215, 175, 135, 95,
|
||||
255, 215, 175, 135, 95
|
||||
)
|
||||
|
||||
private fun showRingView3() {
|
||||
ringv3.showDebugView(false)
|
||||
var valueSum = 100
|
||||
var mList: MutableList<CircleBean> = ArrayList<CircleBean>()
|
||||
var cb: CircleBean
|
||||
val rvMax = ringv3.max
|
||||
var startPro = 0f
|
||||
val size = 10
|
||||
for (i in 0 until size) { // 计算数值占圆环的比例
|
||||
cb = CircleBean()
|
||||
cb.startPro = startPro
|
||||
cb.endPro = (10f / valueSum) * rvMax
|
||||
cb.centerPro = startPro + cb.endPro / 2
|
||||
cb.desc = percentFormat.format(0.10f)
|
||||
startPro += cb.endPro
|
||||
mList.add(cb)
|
||||
}
|
||||
// ringv3.setColors(
|
||||
// Color.rgb(255, 226, 223),
|
||||
// Color.rgb(255, 195, 187),
|
||||
// Color.rgb(255, 164, 155),
|
||||
// Color.rgb(255, 142, 129),
|
||||
// Color.rgb(255, 104, 89),
|
||||
// Color.rgb(220, 240, 253),
|
||||
// Color.rgb(183, 225, 250),
|
||||
// Color.rgb(148, 211, 250),
|
||||
// Color.rgb(108, 196, 248),
|
||||
// Color.rgb(67, 181, 246)
|
||||
// )
|
||||
// ringv3.setColorsArr(COLORS,ALPHAS)
|
||||
ringv3.setData(mList)
|
||||
}
|
||||
|
||||
private fun showRingView4(){
|
||||
ringv4.showDebugView(false)
|
||||
var valueSum = 60
|
||||
var mList: MutableList<CircleBean> = ArrayList<CircleBean>()
|
||||
var cb: CircleBean
|
||||
val rvMax = ringv4.max
|
||||
var startPro = 0f
|
||||
val size = 3
|
||||
for (i in 0 until size) { // 计算数值占圆环的比例
|
||||
cb = CircleBean()
|
||||
cb.startPro = startPro
|
||||
|
||||
if (i == 0){
|
||||
cb.endPro = (12f / valueSum) * rvMax
|
||||
}else if (i == 1){
|
||||
cb.endPro = (32f / valueSum) * rvMax
|
||||
}else{
|
||||
cb.endPro = (16f / valueSum) * rvMax
|
||||
}
|
||||
|
||||
cb.centerPro = startPro + cb.endPro / 2
|
||||
startPro += cb.endPro
|
||||
mList.add(cb)
|
||||
}
|
||||
ringv4.setCenterTxt("20~29岁","男性")
|
||||
ringv4.setData(mList)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import android.widget.SeekBar
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.dongni.tools.Common
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_section_probar.*
|
||||
|
||||
/**
|
||||
* 水平分段进度条
|
||||
* @autor hongbing
|
||||
* @date 2019-05-06
|
||||
*/
|
||||
class SectionProBarActivity : AppCompatActivity(),SeekBar.OnSeekBarChangeListener {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_section_probar)
|
||||
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_section_probar)
|
||||
|
||||
normalSb.setOnSeekBarChangeListener(this)
|
||||
gradientSb.setOnSeekBarChangeListener(this)
|
||||
|
||||
normalSpb.progress = 0 // 注意:不要忘记设置xml中的style,不然进度没有效果
|
||||
|
||||
gradientSpb.setGradientBgColor(Color.rgb(15, 252, 255), Color.rgb(0, 150, 255))
|
||||
gradientSpb.setGradientProColor(Color.rgb(255, 104, 83), Color.rgb(100, 122, 219))
|
||||
gradientSpb.progress = 0
|
||||
|
||||
animSpb.setGradientBgColor(Color.rgb(15, 252, 255), Color.rgb(0, 150, 255))
|
||||
animSpb.setGradientProColor(Color.rgb(255, 104, 83), Color.rgb(100, 122, 219))
|
||||
animSpb.setProgressAnim(80f)
|
||||
|
||||
animBtn.setOnClickListener {
|
||||
animSpb.setProgressAnim(80f)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
|
||||
Common.log_d("onProgressChanged", "progress = $progress->fromUser = $fromUser->seekId = ${seekBar!!.id}")
|
||||
when(seekBar!!.id){
|
||||
R.id.normalSb ->{
|
||||
Common.log_d("onProgressChanged","R.id.normalSpb")
|
||||
normalSpb.progress = progress
|
||||
}
|
||||
R.id.gradientSb ->{
|
||||
Common.log_d("onProgressChanged","R.id.gradientSb")
|
||||
gradientSpb.progress = progress
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStartTrackingTouch(seekBar: SeekBar?) {
|
||||
}
|
||||
|
||||
override fun onStopTrackingTouch(seekBar: SeekBar?) {
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_shadow_probar.*
|
||||
|
||||
class ShadowProBarActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_shadow_probar)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_shadow_probar)
|
||||
spbIng.setProgressWithAnimation(76f)
|
||||
endBtn.setOnClickListener {
|
||||
spbIng.setProgressWithAnimation(100f)
|
||||
spbIng.setProStatus(true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.doyou.cvc.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import android.widget.SeekBar
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_wave_view.*
|
||||
|
||||
/**
|
||||
* 水波纹进度测试类
|
||||
* @autor hongbing
|
||||
* @date 2019-07-22
|
||||
*/
|
||||
class WaveViewActivity : AppCompatActivity(), SeekBar.OnSeekBarChangeListener {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_wave_view)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_wave_view)
|
||||
|
||||
seekBar.setOnSeekBarChangeListener(this)
|
||||
seekBar.progress = 50
|
||||
}
|
||||
|
||||
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
|
||||
circleWv.setPercent(progress)
|
||||
proTv.text = progress.toString().plus("%")
|
||||
}
|
||||
|
||||
override fun onStartTrackingTouch(seekBar: SeekBar?) {
|
||||
}
|
||||
|
||||
override fun onStopTrackingTouch(seekBar: SeekBar?) {
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.doyou.cvc.activity.animator
|
||||
|
||||
import android.animation.AnimatorSet
|
||||
import android.animation.ObjectAnimator
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_bmp_overturn.*
|
||||
|
||||
class BmpOverturnActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_bmp_overturn)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_animator_bmp_overturn)
|
||||
|
||||
bovBtn.setOnClickListener {
|
||||
bov.propReset()
|
||||
startAnim(false)
|
||||
}
|
||||
startAnim(true)
|
||||
}
|
||||
|
||||
private fun startAnim(isFirst: Boolean) {
|
||||
val bottomFlipAnimator = ObjectAnimator.ofFloat(bov, bov.propIsBottomFlip, 30f)
|
||||
bottomFlipAnimator.duration = 1000
|
||||
|
||||
val topFlipAnimator = ObjectAnimator.ofFloat(bov, bov.propIsTopFlip, -30f)
|
||||
topFlipAnimator.startDelay = 200
|
||||
topFlipAnimator.duration = 1000
|
||||
|
||||
val rotationFlipAnimator = ObjectAnimator.ofFloat(bov, bov.propFlipRotation, 270f)
|
||||
rotationFlipAnimator.startDelay = 200
|
||||
rotationFlipAnimator.duration = 1000
|
||||
|
||||
val animatorSet = AnimatorSet()
|
||||
animatorSet.playSequentially(bottomFlipAnimator, rotationFlipAnimator, topFlipAnimator)
|
||||
if (isFirst) {
|
||||
animatorSet.startDelay = 1000
|
||||
}
|
||||
animatorSet.start()
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package com.doyou.cvc.activity.colorfilter
|
||||
|
||||
import android.graphics.ColorMatrix
|
||||
import android.graphics.ColorMatrixColorFilter
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import android.widget.SeekBar
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_color_hue.*
|
||||
|
||||
/**
|
||||
* 图片色度、饱和度、亮度
|
||||
* @autor hongbing
|
||||
* @date 2019-07-24
|
||||
*/
|
||||
class ColorHueActivity : AppCompatActivity(), SeekBar.OnSeekBarChangeListener {
|
||||
|
||||
private var colorMatrix: ColorMatrix? = null
|
||||
private var mHueMatrix: ColorMatrix? = null
|
||||
private var mSaturationMatrix: ColorMatrix? = null
|
||||
private var mLightnessMatrix: ColorMatrix? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_color_hue)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_color_hue)
|
||||
|
||||
colorMatrix = ColorMatrix()
|
||||
mHueMatrix = ColorMatrix()
|
||||
mSaturationMatrix = ColorMatrix()
|
||||
mLightnessMatrix = ColorMatrix()
|
||||
|
||||
bar_Hue.setOnSeekBarChangeListener(this)
|
||||
bar_Saturation.setOnSeekBarChangeListener(this)
|
||||
bar_Lightness.setOnSeekBarChangeListener(this)
|
||||
}
|
||||
|
||||
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
|
||||
|
||||
var hueValue = (bar_Hue.progress - 128f) * 1.0f / 128f * 180
|
||||
var saturationValue = bar_Saturation.progress / 128f
|
||||
var lightnessValue = bar_Lightness.progress / 128f
|
||||
|
||||
// 设置色相
|
||||
mHueMatrix!!.reset()
|
||||
mHueMatrix!!.setRotate(0, hueValue)
|
||||
mHueMatrix!!.setRotate(1, hueValue)
|
||||
mHueMatrix!!.setRotate(2, hueValue)
|
||||
|
||||
// 设置饱和度
|
||||
mSaturationMatrix!!.reset()
|
||||
mSaturationMatrix!!.setSaturation(saturationValue)
|
||||
|
||||
// 亮度
|
||||
mLightnessMatrix!!.reset()
|
||||
mLightnessMatrix!!.setScale(lightnessValue, lightnessValue, lightnessValue, 1f)
|
||||
|
||||
colorMatrix!!.reset()
|
||||
// 效果叠加
|
||||
colorMatrix!!.postConcat(mHueMatrix)
|
||||
colorMatrix!!.postConcat(mSaturationMatrix)
|
||||
colorMatrix!!.postConcat(mLightnessMatrix)
|
||||
jingyHueIv.colorFilter = ColorMatrixColorFilter(colorMatrix)
|
||||
}
|
||||
|
||||
override fun onStartTrackingTouch(seekBar: SeekBar?) {
|
||||
}
|
||||
|
||||
override fun onStopTrackingTouch(seekBar: SeekBar?) {
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.doyou.cvc.activity.colorfilter
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.manager.DispatchManager
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_color_main.*
|
||||
|
||||
/**
|
||||
* 图片滤镜分流页
|
||||
* @autor hongbing
|
||||
* @date 2019-07-24
|
||||
*/
|
||||
class ColorMainActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_color_main)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_color_main)
|
||||
|
||||
matrixBtn.setOnClickListener {
|
||||
DispatchManager.showAct(this, ColorMatrixActivity::class.java)
|
||||
}
|
||||
|
||||
hueBtn.setOnClickListener {
|
||||
DispatchManager.showAct(this, ColorHueActivity::class.java)
|
||||
}
|
||||
|
||||
filterBtn.setOnClickListener {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
package com.doyou.cvc.activity.colorfilter
|
||||
|
||||
import android.graphics.ColorMatrix
|
||||
import android.graphics.ColorMatrixColorFilter
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import android.widget.SeekBar
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_color_matrix.*
|
||||
|
||||
/**
|
||||
* 图片滤镜
|
||||
* @desc 通过修改颜色矩阵来改变它的颜色效果
|
||||
* @autor hongbing
|
||||
* @date 2019-07-24
|
||||
*/
|
||||
class ColorMatrixActivity : AppCompatActivity(), SeekBar.OnSeekBarChangeListener {
|
||||
|
||||
private var colorMatrix: ColorMatrix? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_color_matrix)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_color_matrix)
|
||||
colorMatrix = ColorMatrix()
|
||||
colorMatrix!!.setScale(calculate(128), calculate(128), calculate(128), calculate(128))
|
||||
jingyIv.colorFilter = ColorMatrixColorFilter(colorMatrix)
|
||||
|
||||
bar_R.setOnSeekBarChangeListener(this)
|
||||
bar_G.setOnSeekBarChangeListener(this)
|
||||
bar_B.setOnSeekBarChangeListener(this)
|
||||
bar_A.setOnSeekBarChangeListener(this)
|
||||
}
|
||||
|
||||
private fun calculate(progress: Int): Float {
|
||||
return progress / 128f
|
||||
}
|
||||
|
||||
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
|
||||
colorMatrix?.setScale(calculate(bar_R.progress), calculate(bar_G.progress), calculate(bar_B.progress), calculate(bar_A.progress))
|
||||
jingyIv.colorFilter = ColorMatrixColorFilter(colorMatrix)
|
||||
}
|
||||
|
||||
override fun onStartTrackingTouch(seekBar: SeekBar?) {
|
||||
}
|
||||
|
||||
override fun onStopTrackingTouch(seekBar: SeekBar?) {
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
package com.doyou.cvc.activity.listener;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.provider.Settings;
|
||||
import android.view.OrientationEventListener;
|
||||
import android.view.Surface;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.doyou.cv.utils.LogUtil;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
/**
|
||||
* 屏幕旋转监听
|
||||
*
|
||||
* @autor hongbing
|
||||
* @date 2019-10-08
|
||||
*/
|
||||
public class OrientationListener extends OrientationEventListener implements SettingsSystemObserver.Callback {
|
||||
|
||||
private Context mContext;
|
||||
private WeakReference<Callback> mCallback;
|
||||
public int mOrientation;
|
||||
private boolean mOrientationChanging = false;
|
||||
private int mAccelerometerRotation;
|
||||
private int mOrientationToChange;
|
||||
private SettingsSystemObserver mAccelerometerRotationObserver;
|
||||
|
||||
private static final int ORIENTATION_CHANG = 1;
|
||||
private static final int ORIENTATION_CHANGED = 2;
|
||||
|
||||
@Override
|
||||
public void mtcSettingsSystemChanged(SettingsSystemObserver observer) {
|
||||
try {
|
||||
mAccelerometerRotation = Settings.System.getInt(
|
||||
mContext.getContentResolver(),
|
||||
Settings.System.ACCELEROMETER_ROTATION);
|
||||
LogUtil.logD("旋转", "mtcSettingsSystemChanged...");
|
||||
} catch (Settings.SettingNotFoundException e) {
|
||||
mAccelerometerRotation = 1;
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public interface Callback {
|
||||
void orientationChanged(int orientation, int previousOrientation);
|
||||
}
|
||||
|
||||
public OrientationListener(Context context) {
|
||||
super(context);
|
||||
mContext = context;
|
||||
mAccelerometerRotationObserver = new SettingsSystemObserver(null);
|
||||
mAccelerometerRotationObserver.setCallback(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOrientationChanged(int orientation) {
|
||||
LogUtil.logD("旋转", "orientation = " + orientation + "->mOrientationChanging = " + mOrientationChanging);
|
||||
|
||||
// if (mAccelerometerRotation == 0) return;
|
||||
|
||||
Callback callback = getCallback();
|
||||
if (callback == null) {
|
||||
return;
|
||||
}
|
||||
int newOrientation = Surface.ROTATION_0;
|
||||
if (orientation >= 45 && orientation < 135) {
|
||||
newOrientation = Surface.ROTATION_90;
|
||||
} else if (orientation >= 135 && orientation < 225) {
|
||||
newOrientation = Surface.ROTATION_180;
|
||||
} else if (orientation >= 225 && orientation < 315) {
|
||||
newOrientation = Surface.ROTATION_270;
|
||||
}
|
||||
|
||||
if (mOrientationChanging) { // 旋转中
|
||||
if (newOrientation != mOrientationToChange) {
|
||||
sHandler.removeMessages(ORIENTATION_CHANGED);
|
||||
sHandler.removeMessages(ORIENTATION_CHANG);
|
||||
mOrientationToChange = newOrientation;
|
||||
Message msg = Message.obtain(sHandler);
|
||||
msg.what = ORIENTATION_CHANG;
|
||||
msg.obj = this;
|
||||
msg.arg1 = newOrientation;
|
||||
sHandler.sendMessageDelayed(msg,500);
|
||||
}
|
||||
} else {
|
||||
setOrientation(newOrientation);
|
||||
}
|
||||
}
|
||||
|
||||
public void setCallback(Callback callback) {
|
||||
mCallback = (callback == null) ? null : new WeakReference<>(callback);
|
||||
}
|
||||
|
||||
public Callback getCallback() {
|
||||
return (mCallback == null) ? null : mCallback.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enable() {
|
||||
mOrientation = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
|
||||
ContentResolver contentResolver = mContext.getContentResolver();
|
||||
try {
|
||||
mAccelerometerRotation = Settings.System.getInt(contentResolver,
|
||||
Settings.System.ACCELEROMETER_ROTATION);
|
||||
} catch (Exception e) {
|
||||
mAccelerometerRotation = 1;
|
||||
e.printStackTrace();
|
||||
}
|
||||
mAccelerometerRotationObserver.register(contentResolver, Settings.System.ACCELEROMETER_ROTATION);
|
||||
super.enable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable() {
|
||||
super.disable();
|
||||
mAccelerometerRotationObserver.unregister(mContext.getContentResolver());
|
||||
}
|
||||
|
||||
private void setOrientation(int orientation) {
|
||||
if (mOrientation != orientation) {
|
||||
int previousOrientation = mOrientation;
|
||||
mOrientation = orientation;
|
||||
Callback callback = getCallback();
|
||||
if (callback != null) {
|
||||
callback.orientationChanged(orientation, previousOrientation);
|
||||
}
|
||||
mOrientationChanging = true;
|
||||
mOrientationToChange = orientation;
|
||||
Message msg = Message.obtain(sHandler);
|
||||
msg.what = ORIENTATION_CHANGED;
|
||||
msg.obj = this;
|
||||
sHandler.sendMessageDelayed(msg,500);
|
||||
} else {
|
||||
mOrientationChanging = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void orientationChanged() {
|
||||
mOrientationChanging = false;
|
||||
}
|
||||
|
||||
private static Handler sHandler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
switch (msg.what) {
|
||||
case ORIENTATION_CHANG: {
|
||||
OrientationListener listener = (OrientationListener) msg.obj;
|
||||
listener.setOrientation(msg.arg1);
|
||||
break;
|
||||
}
|
||||
case ORIENTATION_CHANGED: {
|
||||
OrientationListener listener = (OrientationListener) msg.obj;
|
||||
listener.orientationChanged();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
package com.doyou.cvc.activity.listener;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.database.ContentObserver;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.provider.Settings;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
/**
|
||||
* @autor hongbing
|
||||
* @date 2019-10-08
|
||||
*/
|
||||
public class SettingsSystemObserver extends ContentObserver {
|
||||
|
||||
public String mName;
|
||||
private WeakReference<Callback> mCallback;
|
||||
|
||||
public interface Callback {
|
||||
void mtcSettingsSystemChanged(SettingsSystemObserver observer);
|
||||
}
|
||||
|
||||
public SettingsSystemObserver(Handler handler) {
|
||||
super(handler);
|
||||
}
|
||||
|
||||
public void setCallback(Callback callback) {
|
||||
mCallback = (callback == null) ? null : new WeakReference<Callback>(callback);
|
||||
}
|
||||
|
||||
public Callback getCallback() {
|
||||
return (mCallback == null) ? null : mCallback.get();
|
||||
}
|
||||
|
||||
public void register(ContentResolver contentResolver, String name) {
|
||||
Uri uri = Settings.System.getUriFor(name);
|
||||
contentResolver.registerContentObserver(uri, false, this);
|
||||
mName = name;
|
||||
}
|
||||
|
||||
public void unregister(ContentResolver contentResolver) {
|
||||
contentResolver.unregisterContentObserver(this);
|
||||
}
|
||||
|
||||
public void onChange(boolean selfChange) {
|
||||
Callback callback = getCallback();
|
||||
if (callback != null) {
|
||||
callback.mtcSettingsSystemChanged(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.doyou.cvc.activity.ringview
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cv.bean.CircleBean
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_ringview_doubletxt.*
|
||||
|
||||
/**
|
||||
* 中间显示两行文字
|
||||
* @autor hongbing
|
||||
* @date 2019/3/21
|
||||
*/
|
||||
class DoubleTxtActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_ringview_doubletxt)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_ring_view_double)
|
||||
showRingView()
|
||||
updateDoubleBtn.setOnClickListener {
|
||||
showRingView()
|
||||
}
|
||||
}
|
||||
|
||||
private fun showRingView() {
|
||||
doubleTxtRv.showDebugView(false)
|
||||
var valueSum = 60
|
||||
var mList: MutableList<CircleBean> = ArrayList()
|
||||
var cb: CircleBean
|
||||
val rvMax = doubleTxtRv.max
|
||||
var startPro = 0f
|
||||
val size = 3
|
||||
for (i in 0 until size) { // 计算数值占圆环的比例
|
||||
cb = CircleBean()
|
||||
cb.startPro = startPro
|
||||
|
||||
when (i) {
|
||||
0 -> cb.endPro = (12f / valueSum) * rvMax
|
||||
1 -> cb.endPro = (32f / valueSum) * rvMax
|
||||
else -> cb.endPro = (16f / valueSum) * rvMax
|
||||
}
|
||||
|
||||
cb.centerPro = startPro + cb.endPro / 2
|
||||
startPro += cb.endPro
|
||||
mList.add(cb)
|
||||
}
|
||||
doubleTxtRv.setData(mList)
|
||||
doubleTxtRv.setCenterTxt("20~29岁", "女性")
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.doyou.cvc.activity.ringview
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.dongni.tools.ToastUtils
|
||||
import com.doyou.cv.bean.CircleBean
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_ringview_legend.*
|
||||
import java.text.DecimalFormat
|
||||
|
||||
/**
|
||||
* 中间显示两行文字 & 显示图例
|
||||
* @autor hongbing
|
||||
* @date 2019/3/21
|
||||
*/
|
||||
class LegendActivity : AppCompatActivity() {
|
||||
|
||||
private val percentFormat = DecimalFormat("#.##%")
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_ringview_legend)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_ring_view_legend)
|
||||
showRingView()
|
||||
setLegendData()
|
||||
legendRefBtn.setOnClickListener {
|
||||
showRingView()
|
||||
var labels: MutableList<String> = ArrayList()
|
||||
labels.add("手镯")
|
||||
labels.add("胸针")
|
||||
labels.add("其他")
|
||||
legendLv.setData(labels, legendRv.colors)
|
||||
}
|
||||
|
||||
legendLv.setLegendListener {
|
||||
ToastUtils.showShortToast(this, "点击了$it")
|
||||
}
|
||||
}
|
||||
|
||||
private fun showRingView() {
|
||||
legendRv.showDebugView(false)
|
||||
var valueSum = 60
|
||||
var mList: MutableList<CircleBean> = ArrayList()
|
||||
var cb: CircleBean
|
||||
val rvMax = legendRv.max
|
||||
var startPro = 0f
|
||||
val size = 3
|
||||
for (i in 0 until size) { // 计算数值占圆环的比例
|
||||
cb = CircleBean()
|
||||
cb.startPro = startPro
|
||||
|
||||
when (i) {
|
||||
0 -> cb.endPro = (12f / valueSum) * rvMax
|
||||
1 -> cb.endPro = (32f / valueSum) * rvMax
|
||||
else -> cb.endPro = (16f / valueSum) * rvMax
|
||||
}
|
||||
|
||||
cb.centerPro = startPro + cb.endPro / 2
|
||||
cb.desc = percentFormat.format(cb.endPro / rvMax)
|
||||
startPro += cb.endPro
|
||||
mList.add(cb)
|
||||
}
|
||||
legendRv.setData(mList)
|
||||
legendRv.setCenterTxt("20~29岁", "女性")
|
||||
legendRv.setListener { label ->
|
||||
ToastUtils.showShortToast(this, label)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setLegendData() {
|
||||
var labels: MutableList<String> = ArrayList()
|
||||
labels.add("项链")
|
||||
labels.add("戒指")
|
||||
labels.add("男你拿")
|
||||
legendLv.setData(labels, legendRv.colors)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.doyou.cvc.activity.sys.viewpager
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import androidx.collection.LruCache
|
||||
import androidx.viewpager.widget.PagerAdapter
|
||||
import com.doyou.cvc.R
|
||||
|
||||
/**
|
||||
*
|
||||
* @autor hongbing
|
||||
* @date 2019-11-14
|
||||
*/
|
||||
class ViewPagerAdapter : PagerAdapter {
|
||||
|
||||
private var images: List<Int>? = null
|
||||
private var mCachePagerItem = LruCache<Int, ImageView>(5)
|
||||
|
||||
constructor(images: List<Int>?) : super() {
|
||||
this.images = images
|
||||
}
|
||||
|
||||
fun getImages(): List<Int>? {
|
||||
return images
|
||||
}
|
||||
|
||||
override fun getCount(): Int {
|
||||
return images!!.size
|
||||
}
|
||||
|
||||
override fun isViewFromObject(view: View, `object`: Any): Boolean {
|
||||
return view == `object`
|
||||
}
|
||||
|
||||
override fun getItemPosition(`object`: Any): Int {
|
||||
return POSITION_UNCHANGED
|
||||
}
|
||||
|
||||
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
|
||||
container.removeView(`object` as ImageView)
|
||||
}
|
||||
|
||||
override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
||||
var imgV = mCachePagerItem.get(position)
|
||||
if (imgV == null) {
|
||||
imgV = LayoutInflater.from(container.context).inflate(R.layout.viewpager_itemview, null) as ImageView
|
||||
imgV.tag = position
|
||||
mCachePagerItem.put(position, imgV)
|
||||
}
|
||||
if (images!![position] == 0) {
|
||||
imgV.setImageResource(R.mipmap.ic_launcher)
|
||||
} else {
|
||||
imgV.setImageResource(images!![position])
|
||||
}
|
||||
container.addView(imgV)
|
||||
return imgV
|
||||
}
|
||||
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
package com.doyou.cvc.activity.sys.viewpager
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.dongni.tools.DensityUtil
|
||||
import com.doyou.cv.widget.sys.viewpager.transformer.ScaleAlphaTransformer
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_viewpage_transformer.*
|
||||
|
||||
/**
|
||||
* viewpager页面过度转换器功能测试类
|
||||
* @autor hongbing
|
||||
* @date 2019-11-14
|
||||
*/
|
||||
class ViewPagerTransformerActivity : AppCompatActivity() {
|
||||
|
||||
private var mAdapter: ViewPagerAdapter? = null
|
||||
private val images = intArrayOf(
|
||||
R.drawable.fighting,
|
||||
R.drawable.fighting,
|
||||
R.drawable.fighting,
|
||||
R.drawable.fighting,
|
||||
R.drawable.fighting
|
||||
)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_viewpage_transformer)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_viewpager_transformer)
|
||||
initViewPager()
|
||||
}
|
||||
|
||||
private fun initViewPager() {
|
||||
// 小提示:将viewpager父类的touch事件交到viewpager本身上去,可以达到一屏多显的效果
|
||||
transformerContainer.setOnTouchListener { _, event ->
|
||||
return@setOnTouchListener transformerVp.onTouchEvent(event)
|
||||
}
|
||||
transformerVp.offscreenPageLimit = 3
|
||||
transformerVp.pageMargin = DensityUtil.dp2px(45f)
|
||||
// 自定义转换器
|
||||
transformerVp.setPageTransformer(true, ScaleAlphaTransformer())
|
||||
mAdapter = ViewPagerAdapter(images.asList())
|
||||
transformerVp.adapter = mAdapter
|
||||
transformerVp.currentItem = 0
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.doyou.cvc.activity.taperchart
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_taperchart_contrast.*
|
||||
import java.util.*
|
||||
|
||||
class ContrastActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_taperchart_contrast)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_taper_chart_campair)
|
||||
syncTaperChartData()
|
||||
}
|
||||
|
||||
private fun syncTaperChartData() {
|
||||
cont_tchart.offSetXy(48f)
|
||||
cont_tchart.isShowDebugView(true)
|
||||
cont_tchart.setTaperColors(Color.GREEN, Color.DKGRAY)
|
||||
|
||||
var keys: MutableList<String> = ArrayList()
|
||||
for (i in 0 until 6) {
|
||||
if (i % 2 == 0) {
|
||||
keys.add("asdasd")
|
||||
} else {
|
||||
keys.add("第".plus(i + 1).plus("次"))
|
||||
}
|
||||
}
|
||||
|
||||
var values: MutableList<Float> = ArrayList()
|
||||
for (i in 0 until 6) {
|
||||
if (i % 2 == 0) {
|
||||
values.add(0f)
|
||||
} else {
|
||||
values.add(Random().nextInt(100).toFloat())
|
||||
}
|
||||
}
|
||||
val labels = arrayOf("30min以内", "30-45min", "45min以上")
|
||||
cont_tchart.setData(keys, values, labels)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.doyou.cvc.activity.taperchart
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_taperchart_scroll.*
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* 带有水平滑动的峰值图
|
||||
* @autor hongbing
|
||||
* @date 2019/3/25
|
||||
*/
|
||||
class ScrollTaperChartActivity : AppCompatActivity() {
|
||||
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_taperchart_scroll)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_hor_taper_chart)
|
||||
syncTaperChartData()
|
||||
}
|
||||
|
||||
private fun syncTaperChartData() {
|
||||
hor_tchart.offSetXy(48f)
|
||||
|
||||
var keys: MutableList<String> = ArrayList()
|
||||
for (i in 0 until 12) {
|
||||
keys.add("第".plus(i + 1).plus("次"))
|
||||
}
|
||||
|
||||
var values: MutableList<Float> = ArrayList()
|
||||
for (i in 0 until 12) {
|
||||
values.add(Random().nextInt(100).toFloat())
|
||||
}
|
||||
hor_tchart.setData(keys, values)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
package com.doyou.cvc.activity.taperchart
|
||||
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cv.widget.taperchart.TaperChart
|
||||
import com.doyou.cvc.R
|
||||
import kotlinx.android.synthetic.main.activity_taperchart.*
|
||||
import java.util.*
|
||||
|
||||
class TaperChartActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_taperchart)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_taper_chart)
|
||||
syncTaperChartData(1)
|
||||
syncTaperChartData(2)
|
||||
syncTaperChartData(3)
|
||||
syncTaperChartData(4)
|
||||
syncTaperChartLayoutData()
|
||||
syncTaperChartLayoutDataDwColor()
|
||||
syncTaperChartLayoutDataDwColorCompar()
|
||||
|
||||
var isTrue = true
|
||||
label5.setOnClickListener {
|
||||
if (isTrue) {
|
||||
isTrue = false
|
||||
tchartLayout.setEmpty()
|
||||
} else {
|
||||
isTrue = true
|
||||
syncTaperChartLayoutData()
|
||||
}
|
||||
}
|
||||
contrastBtn.setOnClickListener {
|
||||
startActivity(Intent(this, ContrastActivity::class.java))
|
||||
}
|
||||
}
|
||||
|
||||
private fun syncTaperChartData(type: Int) {
|
||||
when (type) {
|
||||
1 -> {
|
||||
tchartV.isShowDebugView(false)
|
||||
tchartV.setTaperColors(Color.GREEN,Color.GRAY,Color.RED)
|
||||
|
||||
var keys: MutableList<String> = ArrayList()
|
||||
for (i in 0 until 3) {
|
||||
keys.add("第".plus(i + 1).plus("次"))
|
||||
}
|
||||
|
||||
var values: MutableList<Float> = ArrayList()
|
||||
for (i in 0 until 3) {
|
||||
values.add((i + 1) * Random().nextInt(100).toFloat())
|
||||
}
|
||||
tchartV.setData(keys, values)
|
||||
}
|
||||
2 -> {
|
||||
|
||||
tchartV1.offSetXy(96f)
|
||||
tchartV1.isShowDebugView(true)
|
||||
tchartV1.setHintIsRatio(true)
|
||||
|
||||
var keys: MutableList<String> = ArrayList()
|
||||
for (i in 0 until 4) {
|
||||
keys.add("第".plus(i + 1).plus("次"))
|
||||
}
|
||||
|
||||
var values: MutableList<Float> = ArrayList()
|
||||
for (i in 0 until 4) {
|
||||
values.add((i + 1) * Random().nextInt(100).toFloat())
|
||||
}
|
||||
val labels = arrayOf("男性", "女性")
|
||||
tchartV1.setData(keys, values,labels)
|
||||
}
|
||||
3 ->{
|
||||
tchartV2.offSetXy(48f)
|
||||
tchartV2.isShowDebugView(true)
|
||||
|
||||
var keys: MutableList<String> = ArrayList()
|
||||
for (i in 0 until 4) {
|
||||
keys.add("第".plus(i + 1).plus("次"))
|
||||
}
|
||||
|
||||
var values: MutableList<Float> = ArrayList()
|
||||
for (i in 0 until 4) {
|
||||
// values.add(Random().nextInt(80).toFloat())
|
||||
values.add(Random().nextFloat())
|
||||
// values.add(0.2f * (i + 1))
|
||||
}
|
||||
val labels = arrayOf("男性", "女性")
|
||||
tchartV2.setData(keys, values,labels)
|
||||
}
|
||||
4 ->{
|
||||
tchartV3.offSetXy(48f)
|
||||
tchartV3.isShowDebugView(true)
|
||||
tchartV3.setTaperColors(Color.GREEN, Color.CYAN)
|
||||
|
||||
var keys: MutableList<String> = ArrayList()
|
||||
for (i in 0 until 6) {
|
||||
keys.add("第".plus(i + 1).plus("次"))
|
||||
}
|
||||
|
||||
var values: MutableList<Float> = ArrayList()
|
||||
for (i in 0 until 6) {
|
||||
values.add(Random().nextInt(100).toFloat())
|
||||
}
|
||||
val labels = arrayOf("30min以内", "30-45min","45min以上")
|
||||
tchartV3.setData(keys, values,labels)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun syncTaperChartLayoutData() {
|
||||
tchartLayout.chart.isDrawTopValue = true
|
||||
var keys: MutableList<String> = ArrayList()
|
||||
var labels: MutableList<String> = ArrayList()
|
||||
for (i in 0 until 3) {
|
||||
keys.add("第".plus(i + 1).plus("次"))
|
||||
}
|
||||
labels.add("( <30分 )")
|
||||
labels.add("( 30分-45分 )")
|
||||
labels.add("( >45分 )")
|
||||
|
||||
var values: MutableList<Float> = ArrayList()
|
||||
for (i in 0 until 3) {
|
||||
values.add((i + 1) * Random().nextInt(100).toFloat())
|
||||
}
|
||||
|
||||
tchartLayout.setData(keys, values, labels)
|
||||
}
|
||||
|
||||
private fun syncTaperChartLayoutDataDwColor(){
|
||||
tchartLayout1.setColors(Color.GREEN,Color.LTGRAY,Color.RED)
|
||||
var keys: MutableList<String> = ArrayList()
|
||||
var labels: MutableList<String> = ArrayList()
|
||||
for (i in 0 until 3) {
|
||||
keys.add("第".plus(i + 1).plus("次"))
|
||||
}
|
||||
labels.add("( <30分 )")
|
||||
labels.add("( 30分-45分 )")
|
||||
labels.add("( >45分 )")
|
||||
|
||||
var values: MutableList<Float> = ArrayList()
|
||||
for (i in 0 until 3) {
|
||||
values.add((i + 1) * Random().nextInt(100).toFloat())
|
||||
}
|
||||
|
||||
var btmLabels = arrayOf("第一次","第二次","第三次")
|
||||
tchartLayout1.setData(keys, values, btmLabels,"次",labels,false)
|
||||
}
|
||||
|
||||
/**
|
||||
* 峰值图对比
|
||||
*/
|
||||
private fun syncTaperChartLayoutDataDwColorCompar() {
|
||||
tchartLayout2.chart.setTcMode(TaperChart.Mode.Fifth.ordinal)
|
||||
tchartLayout2.chart.offSetXy(48f)
|
||||
tchartLayout2.chart.isShowDebugView(false)
|
||||
tchartLayout2.chart.isDrawTopValue = true
|
||||
tchartLayout2.setColors(Color.GREEN, Color.BLUE)
|
||||
|
||||
var keys: MutableList<String> = ArrayList()
|
||||
for (i in 0 until 6) {
|
||||
keys.add("第".plus(i + 1).plus("次"))
|
||||
}
|
||||
|
||||
var values: MutableList<Float> = ArrayList()
|
||||
for (i in 0 until 6) {
|
||||
values.add(Random().nextInt(100).toFloat())
|
||||
}
|
||||
val labels = arrayOf("30min以内", "30-45min", "45min以上")
|
||||
|
||||
var btmLabels: MutableList<String> = ArrayList()
|
||||
btmLabels.add("( <30分 )")
|
||||
btmLabels.add("( 30分-45分 )")
|
||||
btmLabels.add("( >45分 )")
|
||||
|
||||
tchartLayout2.setData(keys, values, labels, "次", btmLabels,true)
|
||||
// tchartLayout2.setData(keys, values)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
package com.doyou.cvc.activity.timeruler;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.doyou.cv.widget.timeruler.TimeRulerView;
|
||||
import com.doyou.cvc.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
|
||||
public class TimeRulerActivity extends AppCompatActivity {
|
||||
|
||||
private TimeRulerView mTimeRulerView;
|
||||
private TimeRulerPickScaleView mTimeRulerPickScaleView;
|
||||
|
||||
private TextView mShowTimeTv;
|
||||
private Button mResetBtn;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_time_ruler);
|
||||
initView();
|
||||
initListener();
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
mTimeRulerView = findViewById(R.id.ruler_id_timeRulerView);
|
||||
mTimeRulerPickScaleView = findViewById(R.id.ruler_id_timeRulerPickView);
|
||||
mShowTimeTv = findViewById(R.id.time_tv);
|
||||
mResetBtn = findViewById(R.id.btn_reset);
|
||||
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setTitle(R.string.title_timeruler_view);
|
||||
initTime();
|
||||
}
|
||||
|
||||
private void initTime() {
|
||||
// 包括连续片段和不连续片段,开发者自己设置
|
||||
Calendar startCalendar1 = Calendar.getInstance();
|
||||
startCalendar1.set(Calendar.HOUR_OF_DAY, 0);
|
||||
startCalendar1.set(Calendar.MINUTE, 0);
|
||||
startCalendar1.set(Calendar.SECOND, 0);
|
||||
startCalendar1.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
Calendar stopCalendar1 = Calendar.getInstance();
|
||||
stopCalendar1.set(Calendar.HOUR_OF_DAY, 2);
|
||||
stopCalendar1.set(Calendar.MINUTE, 0);
|
||||
stopCalendar1.set(Calendar.SECOND, 0);
|
||||
stopCalendar1.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
Calendar startCalendar2 = Calendar.getInstance();
|
||||
startCalendar2.set(Calendar.HOUR_OF_DAY, 3);
|
||||
startCalendar2.set(Calendar.MINUTE, 0);
|
||||
startCalendar2.set(Calendar.SECOND, 0);
|
||||
startCalendar2.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
Calendar stopCalendar2 = Calendar.getInstance();
|
||||
stopCalendar2.set(Calendar.HOUR_OF_DAY, 23);
|
||||
stopCalendar2.set(Calendar.MINUTE, 59);
|
||||
stopCalendar2.set(Calendar.SECOND, 59);
|
||||
stopCalendar2.set(Calendar.MILLISECOND, 999);
|
||||
|
||||
|
||||
TimeRulerView.TimeInfo timeInfo1 = new TimeRulerView.TimeInfo(startCalendar1, stopCalendar1);
|
||||
TimeRulerView.TimeInfo timeInfo2 = new TimeRulerView.TimeInfo(startCalendar2, stopCalendar2);
|
||||
ArrayList<TimeRulerView.TimeInfo> timeInfos = new ArrayList<>();
|
||||
timeInfos.add(timeInfo1);
|
||||
timeInfos.add(timeInfo2);
|
||||
|
||||
mTimeRulerView.setTimeInfos(timeInfos);
|
||||
mTimeRulerView.invalidate();
|
||||
}
|
||||
|
||||
private void initListener() {
|
||||
mTimeRulerPickScaleView.setTimeRulerPickViewListener(totalTimePerCell -> {
|
||||
//刻度选择回调
|
||||
mTimeRulerView.setTotalCellNum(totalTimePerCell);
|
||||
});
|
||||
mTimeRulerView.setOnChooseTimeListener(calendar -> mShowTimeTv.setText(String.format("你选中的时间:%02d:%02d:%02d", calendar.get(Calendar.HOUR_OF_DAY),
|
||||
calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND))));
|
||||
mResetBtn.setOnClickListener(v -> {
|
||||
mTimeRulerView.reset();
|
||||
initTime();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置时间
|
||||
*
|
||||
* @param calendar
|
||||
*/
|
||||
public void setRulerTime(Calendar calendar) {
|
||||
if (!mTimeRulerView.isMoving()) {
|
||||
mTimeRulerView.setTime(calendar);
|
||||
mTimeRulerView.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == android.R.id.home){
|
||||
finish();
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
package com.doyou.cvc.activity.timeruler;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.RectF;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.doyou.cvc.R;
|
||||
/**
|
||||
* @author Amosnail
|
||||
* @date 2017/4/11
|
||||
* @desc 时间刻度缩放选择
|
||||
*/
|
||||
public class TimeRulerPickScaleView extends View {
|
||||
private Bitmap mBitmap;
|
||||
private boolean isDownRight = false;
|
||||
private Paint mBitmapPaint;
|
||||
|
||||
private float mMaxTotalTimePerCell;
|
||||
private float mMinTotalTimePerCell;
|
||||
private float mDegree;
|
||||
private float mCurrentTotalTimePerCell;
|
||||
private float mDownY;
|
||||
private float mTouchY;
|
||||
private float mBitmapPosition;//图片top位置
|
||||
private RectF mClickRecF;
|
||||
private float mWidth;
|
||||
private float mHeight;
|
||||
|
||||
public TimeRulerPickScaleView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public TimeRulerPickScaleView(Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public TimeRulerPickScaleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
|
||||
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TimeRulerPickScaleView);
|
||||
initDefaultValue(typedArray);
|
||||
init(context);
|
||||
}
|
||||
|
||||
private void initDefaultValue(@NonNull TypedArray typedArray) {
|
||||
mMaxTotalTimePerCell = typedArray.getFloat(R.styleable.TimeRulerPickScaleView_maxTotalTimePerCell, 288);
|
||||
mMinTotalTimePerCell = typedArray.getFloat(R.styleable.TimeRulerPickScaleView_minTotalTimePerCell, 24);
|
||||
}
|
||||
|
||||
private void init(Context context) {
|
||||
mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.timerulerview_move);
|
||||
mWidth = getResources().getDimension(R.dimen.timerulerpick_width);
|
||||
mHeight = getResources().getDimension(R.dimen.timerulerpick_height);
|
||||
|
||||
mBitmapPaint = new Paint();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
|
||||
if (mClickRecF == null) {
|
||||
mClickRecF = new RectF();
|
||||
mBitmapPosition = mHeight / 2.0f - mBitmap.getHeight() / 2.0f;
|
||||
mClickRecF.left = 0;
|
||||
mClickRecF.right = mBitmap.getWidth();
|
||||
mClickRecF.top = mBitmapPosition;
|
||||
mClickRecF.bottom = mBitmapPosition + mBitmap.getHeight();
|
||||
|
||||
mDegree = (mMaxTotalTimePerCell - mMinTotalTimePerCell) / (mHeight - mBitmap.getHeight());
|
||||
mCurrentTotalTimePerCell = mMaxTotalTimePerCell - mDegree * mBitmapPosition;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
mClickRecF.top = mBitmapPosition;
|
||||
mClickRecF.bottom = mBitmapPosition + mBitmap.getHeight();
|
||||
if (mClickRecF.contains(event.getX(), event.getY())) {
|
||||
isDownRight = true;
|
||||
}
|
||||
mDownY = event.getY();
|
||||
return true;
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
if (isDownRight) {
|
||||
mTouchY = event.getY();
|
||||
float diff = mTouchY - mDownY;
|
||||
mBitmapPosition += diff;
|
||||
if (mBitmapPosition < 0) {
|
||||
mBitmapPosition = 0;
|
||||
} else if (mBitmapPosition > (mHeight - mBitmap.getHeight())) {
|
||||
mBitmapPosition = mHeight - mBitmap.getHeight();
|
||||
}
|
||||
mCurrentTotalTimePerCell = mMaxTotalTimePerCell - mDegree * mBitmapPosition;
|
||||
if (timeRulerPickViewListener != null) {
|
||||
timeRulerPickViewListener.onTotalTimePerCellChanged((int) mCurrentTotalTimePerCell);
|
||||
}
|
||||
invalidate();
|
||||
mDownY = mTouchY;
|
||||
}
|
||||
return true;
|
||||
case MotionEvent.ACTION_UP:
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
isDownRight = false;
|
||||
//传递最后的值
|
||||
return true;
|
||||
default:
|
||||
return super.onTouchEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
canvas.drawBitmap(mBitmap, mWidth / 2.0f - mBitmap.getWidth() / 2.0f, mBitmapPosition, mBitmapPaint);
|
||||
}
|
||||
|
||||
private TimeRulerPickViewListener timeRulerPickViewListener;
|
||||
|
||||
public void setTimeRulerPickViewListener(TimeRulerPickViewListener timeRulerPickViewListener) {
|
||||
this.timeRulerPickViewListener = timeRulerPickViewListener;
|
||||
}
|
||||
|
||||
public interface TimeRulerPickViewListener {
|
||||
void onTotalTimePerCellChanged(int totalTimePerCell);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.doyou.cvc.activity.touch
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
|
||||
/**
|
||||
* 自定义滑动控件(支持多指,支持惯性滑动)
|
||||
* @autor hongbing
|
||||
* @date 2019-08-22
|
||||
*/
|
||||
class CustomScrollViewActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.touch_custom_scrollview_activity)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_customscrollview_view)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.doyou.cvc.activity.touch
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.doyou.cvc.R
|
||||
|
||||
/**
|
||||
* 仿网易一元夺宝下拉刷新效果
|
||||
* @autor hongbing
|
||||
* @date 2019-08-22
|
||||
*/
|
||||
class RefreshViewActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.touch_refreshview_activity)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setTitle(R.string.title_refresh_view)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.doyou.cvc.manager
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
|
||||
object DispatchManager{
|
||||
|
||||
fun showAct(act: Activity, cls: Class<out AppCompatActivity>) {
|
||||
act.startActivity(Intent(act, cls))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.doyou.cvc.utils;
|
||||
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
|
||||
import com.dongni.tools.EmptyUtils;
|
||||
|
||||
/**
|
||||
* 工具类
|
||||
*
|
||||
* @autor hongbing
|
||||
* @date 2019-11-27
|
||||
*/
|
||||
public final class AppUtils {
|
||||
|
||||
/**
|
||||
* 复制文本
|
||||
*
|
||||
* @param context
|
||||
* @param content
|
||||
*/
|
||||
public static void copyContent(Context context, String content) {
|
||||
if (EmptyUtils.isNotEmpty(content)) {
|
||||
ClipboardManager cm = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
ClipData clipData = ClipData.newPlainText("Label", content);
|
||||
cm.setPrimaryClip(clipData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用系统浏览器打开指定网址
|
||||
*
|
||||
* @param context
|
||||
* @param url
|
||||
*/
|
||||
public static void openUrlByBrowser(Context context, String url) {
|
||||
Uri uri = Uri.parse(url);
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
kotlin
|
||||
|
||||
项目中的log打印选择:
|
||||
app:Common.log_*
|
||||
library:LogUtil.log*
|
||||
|
||||
集合转数组:
|
||||
|
||||
数组转集合:array.toList() as List<T> | array.toList() as ArrayList<String> | Arrays.asList(names) | Arrays.asList("a", "b", "c")
|
||||
|
||||
项目支持androidx:https://developer.android.com/jetpack/androidx/migrate#blog_posts
|
||||
|
||||
|
||||
Android x 原始支持库 API 软件包映射到 androidx 命名空间:
|
||||
* https://developer.android.com/jetpack/androidx/migrate?hl=zh-cn
|
||||
|
||||
视频转GIF:
|
||||
|
||||
保存配置:
|
||||
1、图片大小:360*782
|
||||
2、播放速度:16帧/每秒 符合android的视觉设计
|
||||
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M15,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM6,10L6,7L4,7v3L1,10v2h3v3h2v-3h3v-2L6,10zM15,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0" />
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M9,2L7.17,4H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2H9zm3,15c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z" />
|
||||
</vector>
|
||||
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M22,16V4c0,-1.1 -0.9,-2 -2,-2H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zm-11,-4l2.03,2.71L16,11l4,5H8l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2H4V6H2z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M22.7,19l-9.1,-9.1c0.9,-2.3 0.4,-5 -1.5,-6.9 -2,-2 -5,-2.4 -7.4,-1.3L9,6 6,9 1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1c1.9,1.9 4.6,2.4 6.9,1.5l9.1,9.1c0.4,0.4 1,0.4 1.4,0l2.3,-2.3c0.5,-0.4 0.5,-1.1 0.1,-1.4z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M4,6H2v14c0,1.1 0.9,2 2,2h14v-2H4V6zm16,-4H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2zm-8,12.5v-9l6,4.5 -6,4.5z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,34 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportHeight="108"
|
||||
android:viewportWidth="108">
|
||||
<path
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeWidth="1">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="78.5885"
|
||||
android:endY="90.9159"
|
||||
android:startX="48.7653"
|
||||
android:startY="61.0927"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#44000000"
|
||||
android:offset="0.0"/>
|
||||
<item
|
||||
android:color="#00000000"
|
||||
android:offset="1.0"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="nonZero"
|
||||
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeWidth="1"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<solid android:color="#fff"/>
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="#008FC9"/>
|
||||
<corners android:radius="8dp"/>
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,171 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportHeight="108"
|
||||
android:viewportWidth="108">
|
||||
<path
|
||||
android:fillColor="#26A69A"
|
||||
android:pathData="M0,0h108v108h-108z"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeColor="#33FFFFFF"
|
||||
android:strokeWidth="0.8"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<solid android:color="#CCFF6464" />
|
||||
<corners android:radius="2dp" />
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,9 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="135"
|
||||
android:centerColor="#009688"
|
||||
android:endColor="#00695C"
|
||||
android:startColor="#4DB6AC"
|
||||
android:type="linear"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners android:radius="20dp" />
|
||||
<stroke
|
||||
android:width="2dp"
|
||||
android:color="#CCCCCC" />
|
||||
<solid android:color="#FFFFFF" />
|
||||
</shape>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?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"
|
||||
android:gravity="center"
|
||||
tools:background="@color/testBg"
|
||||
tools:context=".activity.animator.BmpOverturnActivity">
|
||||
|
||||
<com.doyou.cv.widget.animator.BmpOverturnView
|
||||
android:id="@+id/bov"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/bovBtn"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="once again"
|
||||
android:textAllCaps="false"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/bov" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
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=".activity.CircleProgressBarViewActivity">
|
||||
|
||||
<com.doyou.cv.widget.progress.circle.CircleProgressBarView
|
||||
android:id="@+id/oneCpbv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="160dp"
|
||||
android:layout_marginTop="30dp"
|
||||
app:centerProgressTextColor="#FF6953"
|
||||
app:centerProgressTextSize="20sp"
|
||||
app:circleBgStrokeWidth="5dp"
|
||||
app:isDrawCenterProgressText="true"
|
||||
app:progressStrokeWidth="8dp"
|
||||
app:targetNumSize="15sp"
|
||||
app:targetTextColor="#999999"
|
||||
app:target_text="测试一下"/>
|
||||
|
||||
<com.doyou.cv.widget.progress.circle.CircleProgressBarView
|
||||
android:id="@+id/twoCpbv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="160dp"
|
||||
android:layout_marginTop="30dp"
|
||||
app:centerProgressTextColor="#FF6953"
|
||||
app:centerProgressTextSize="20sp"
|
||||
app:circleBgStrokeWidth="5dp"
|
||||
app:isDrawCenterProgressText="true"
|
||||
app:layout_constraintTop_toBottomOf="@id/oneCpbv"
|
||||
app:progressStrokeWidth="8dp"
|
||||
app:targetNumSize="15sp"
|
||||
app:targetTextColor="#999999"
|
||||
app:target_text="测试一下"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/mockCpbvLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="30dp"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintTop_toBottomOf="@id/twoCpbv">
|
||||
|
||||
<com.doyou.cv.widget.progress.circle.CircleProgressBarView
|
||||
android:id="@+id/threeCpbv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="160dp"
|
||||
app:centerProgressTextColor="#FF6953"
|
||||
app:centerProgressTextSize="20sp"
|
||||
app:circleBgStrokeWidth="5dp"
|
||||
app:isDrawCenterProgressText="true"
|
||||
app:progressStrokeWidth="8dp"
|
||||
app:targetNumSize="15sp"
|
||||
app:targetTextColor="#999999"
|
||||
app:target_text="测试一下"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/setFinishBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="24dp"
|
||||
android:text="设置完成"/>
|
||||
</LinearLayout>
|
||||
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/mockCpbvLayout"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,55 @@
|
||||
<?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"
|
||||
android:gravity="center"
|
||||
tools:background="@color/testBg"
|
||||
tools:context=".activity.CircleBtnActivity">
|
||||
|
||||
<com.doyou.cv.widget.view.CircleButton
|
||||
android:id="@+id/videoCb"
|
||||
android:layout_width="70dp"
|
||||
android:layout_height="70dp"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@id/audioCb"
|
||||
app:layout_constraintTop_toTopOf="@id/audioCb"
|
||||
tools:src="@mipmap/call_answer_video" />
|
||||
|
||||
<com.doyou.cv.widget.view.CircleButton
|
||||
android:id="@+id/audioCb"
|
||||
android:layout_width="70dp"
|
||||
android:layout_height="70dp"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_toRightOf="@id/videoCb"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toRightOf="@id/videoCb"
|
||||
app:layout_constraintRight_toLeftOf="@id/cameraCb"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:src="@mipmap/call_answer_audio" />
|
||||
|
||||
<com.doyou.cv.widget.view.CircleButton
|
||||
android:id="@+id/cameraCb"
|
||||
android:layout_width="70dp"
|
||||
android:layout_height="70dp"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_toRightOf="@id/audioCb"
|
||||
app:layout_constraintLeft_toRightOf="@id/audioCb"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@id/audioCb"
|
||||
tools:src="@mipmap/call_camera_on_normal" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="(小提示:试着旋转手机看看)"
|
||||
android:textColor="@color/page_font"
|
||||
android:textSize="@dimen/page_font_size"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/audioCb" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/jingyHueIv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="230dp"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/fighting"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginTop="32dp"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingBottom="8dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:text="色相:"
|
||||
android:textColor="@color/txt_black"
|
||||
android:textSize="16dp"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/bar_Hue"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:max="255"
|
||||
android:progress="128"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingBottom="8dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="match_parent"
|
||||
android:text="彩度(饱和):"
|
||||
android:textColor="@color/txt_black"
|
||||
android:textSize="16dp"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/bar_Saturation"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:max="255"
|
||||
android:progress="128"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingBottom="8dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="match_parent"
|
||||
android:text="明度(亮度):"
|
||||
android:textColor="@color/txt_black"
|
||||
android:textSize="16dp"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/bar_Lightness"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:max="255"
|
||||
android:progress="128"/>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:padding="24dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/matrixBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="ColorMatrix"
|
||||
android:textAllCaps="false"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/hueBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="ColorHue"
|
||||
android:textAllCaps="false"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/filterBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="ColorFilter"
|
||||
android:textAllCaps="false"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/jingyIv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="230dp"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/fighting"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginTop="32dp"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingBottom="8dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginTop="-5dp"
|
||||
android:text="R:"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/bar_R"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:max="255"
|
||||
android:progress="128"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingBottom="8dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="-5dp"
|
||||
android:text="G:"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/bar_G"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:max="255"
|
||||
android:progress="128"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingBottom="8dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="-5dp"
|
||||
android:text="B:"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/bar_B"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:max="255"
|
||||
android:progress="128"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingBottom="8dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="-5dp"
|
||||
android:text="A:"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/bar_A"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:max="255"
|
||||
android:progress="128"/>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView 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"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="24dp"
|
||||
tools:context=".activity.GradientProBarActivity">
|
||||
|
||||
|
||||
<com.doyou.cv.widget.progress.circle.CircleProgress
|
||||
android:id="@+id/circlePro"
|
||||
android:layout_width="250dp"
|
||||
android:layout_height="250dp"
|
||||
android:layout_marginTop="24dp"
|
||||
app:antiAlias="true"
|
||||
app:arcWidth="15dp"
|
||||
app:bgArcColor="@android:color/darker_gray"
|
||||
app:bgArcWidth="2dp"
|
||||
app:dottedLineWidth="12dp"
|
||||
app:foreEndColor="#F4F200"
|
||||
app:foreStartColor="#FE6615"
|
||||
app:hintSize="15sp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:maxValue="100"
|
||||
app:startAngle="135"
|
||||
app:sweepAngle="270"
|
||||
app:textOffsetPercentInRadius="0.5"
|
||||
app:unit="目标100KM"
|
||||
app:unitColor="@android:color/darker_gray"
|
||||
app:unitSize="15sp"
|
||||
app:value="75"
|
||||
app:valueColor="#FFCC1E"
|
||||
app:valueSize="80sp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/refeshPro"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="点我刷新进度"
|
||||
app:layout_constraintTop_toBottomOf="@id/circlePro"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/showScalebtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="点我刷新进度"
|
||||
app:layout_constraintTop_toBottomOf="@id/refeshPro"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView 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"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="24dp"
|
||||
tools:context=".release.GradientProBarActivity">
|
||||
|
||||
<com.doyou.cv.widget.progress.circle.GradientProBar
|
||||
android:id="@+id/gpb"
|
||||
android:layout_width="340dp"
|
||||
android:layout_height="340dp"
|
||||
android:layout_marginTop="24dp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/refeshtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="点我刷新进度"
|
||||
app:layout_constraintTop_toBottomOf="@id/gpb"/>
|
||||
|
||||
</androidx.constraintlayout.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView 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"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="24dp"
|
||||
tools:context=".activity.GradientLineActivity">
|
||||
|
||||
<com.doyou.cv.widget.GradientLine
|
||||
android:id="@+id/gLineUp"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginTop="24dp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:gl_mode="down"/>
|
||||
|
||||
<com.doyou.cv.widget.GradientLine
|
||||
android:id="@+id/gLineFlat"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:layout_marginTop="24dp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:gl_mode="flat"/>
|
||||
|
||||
<com.doyou.cv.widget.GradientLine
|
||||
android:id="@+id/gLineDown"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginRight="16dp"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:gl_mode="up"/>
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/gLineBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginTop="32dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:text="动画再来一次"
|
||||
app:layout_constraintTop_toBottomOf="@id/gLineDown"/>
|
||||
|
||||
|
||||
<com.doyou.cv.widget.GradientLine
|
||||
android:id="@+id/gLineAgain"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:layout_marginTop="24dp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/gLineBtn"
|
||||
tools:gl_mode="up"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/gLineBtn2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginTop="32dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:text="快速点击切换图形模式"
|
||||
app:layout_constraintTop_toBottomOf="@id/gLineAgain"/>
|
||||
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/gLineBtn2"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
tools:context=".activity.HalfCircleProViewActivity">
|
||||
|
||||
<com.doyou.cv.widget.HalfCircleProView
|
||||
android:id="@+id/hcpv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout 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"
|
||||
android:orientation="vertical"
|
||||
tools:context=".activity.ShadowProBarActivity">
|
||||
|
||||
<com.doyou.cv.widget.progress.horbar.HorProBar
|
||||
android:id="@+id/hbBar1"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="24dp" />
|
||||
|
||||
<com.doyou.cv.widget.progress.horbar.HorProBar
|
||||
android:id="@+id/hbBar2"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
app:pro_height="5dp"
|
||||
android:layout_marginTop="24dp" />
|
||||
|
||||
<com.doyou.cv.widget.progress.horbar.HorProBar
|
||||
android:id="@+id/hbBar3"
|
||||
android:layout_width="130dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="24dp"
|
||||
app:pro_width="80dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/refeshBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:text="刷新"
|
||||
app:layout_constraintTop_toBottomOf="@id/spbIng" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?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"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/topTv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="20dp"
|
||||
android:gravity="center"
|
||||
android:text="V"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/lftTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="60dp"
|
||||
android:layout_marginLeft="2dp"
|
||||
android:gravity="center"
|
||||
android:text="<"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/topTv"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/rgtTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="60dp"
|
||||
android:layout_marginRight="2dp"
|
||||
android:gravity="center"
|
||||
android:text=">"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/topTv"/>
|
||||
|
||||
<com.doyou.cv.widget.HorScrollSelectedView
|
||||
android:id="@+id/hssv"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="60dp"
|
||||
app:layout_constraintLeft_toRightOf="@id/lftTv"
|
||||
app:layout_constraintRight_toLeftOf="@id/rgtTv"
|
||||
app:layout_constraintTop_toBottomOf="@id/topTv"
|
||||
app:seeSize="5"/>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.doyou.cv.widget.view.ImgTxtMixtureView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
</FrameLayout>
|
||||
@@ -0,0 +1,121 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<LinearLayout
|
||||
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"
|
||||
android:orientation="vertical"
|
||||
tools:context=".activity.LegendRingViewActivity">
|
||||
|
||||
<!--android:background="@color/colorAccent"-->
|
||||
<com.doyou.cv.widget.progress.circle.CircleView
|
||||
android:id="@+id/lrv_one"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="168dp"
|
||||
android:max="360"
|
||||
android:paddingBottom="@dimen/ringv_pading"
|
||||
android:paddingTop="@dimen/ringv_pading"
|
||||
app:cv_boderW="7dp"
|
||||
app:cv_center_style="txt"
|
||||
app:cv_center_txt="风格"
|
||||
app:cv_center_txt_color="#2a2a2a"
|
||||
app:cv_center_txt_size="14sp"/>
|
||||
|
||||
<com.doyou.cv.widget.progress.circle.CircleView
|
||||
android:id="@+id/lrv_two"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="168dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:max="360"
|
||||
android:paddingBottom="@dimen/ringv_pading"
|
||||
android:paddingTop="@dimen/ringv_pading"
|
||||
app:cv_boderW="7dp"
|
||||
app:cv_cengter_txt_margin="2dp"
|
||||
app:cv_center_style="double_txt"
|
||||
app:cv_center_txt="风格 样式"
|
||||
app:cv_center_txt_color="#2a2a2a"
|
||||
app:cv_center_txt_size="14sp"/>
|
||||
|
||||
<com.doyou.cv.widget.progress.ring.LegendRingView
|
||||
android:id="@+id/lrv_three"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
app:lrv_circle_center_txt="哈哈"
|
||||
app:lrv_circle_center_txt_color="@color/colorAccent"
|
||||
app:lrv_circle_center_txt_size="15sp"
|
||||
app:lrv_circle_height="168dp"
|
||||
app:lrv_circle_paddingBottom="@dimen/ringv_pading"
|
||||
app:lrv_circle_paddingTop="@dimen/ringv_pading"
|
||||
app:lrv_legend_font_color="#2a2a2a"
|
||||
app:lrv_legend_font_size="12sp"
|
||||
app:lrv_legend_labelAndPoint_margin="4dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="再来一次"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/lrv_wgtLl"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="7dp"
|
||||
android:layout_marginRight="7dp"
|
||||
android:layout_marginTop="24dp">
|
||||
|
||||
<com.doyou.cv.widget.progress.ring.LegendRingView
|
||||
android:id="@+id/lrv_left"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
app:lrv_circle_boderW="5dp"
|
||||
app:lrv_circle_center_style="double_txt"
|
||||
app:lrv_circle_center_txt="看货 材质"
|
||||
app:lrv_circle_center_txt_size="10sp"
|
||||
app:lrv_circle_height="128dp"
|
||||
app:lrv_circle_paddingBottom="12dp"
|
||||
app:lrv_circle_paddingTop="12dp"
|
||||
app:lrv_legend_circle_margin="4dp"
|
||||
app:lrv_legend_columnW="36dp"
|
||||
app:lrv_legend_font_size="10sp"
|
||||
app:lrv_legend_vertical_margin="6dp"
|
||||
app:lrv_offset_left="6dp"/>
|
||||
|
||||
<com.doyou.cv.widget.progress.ring.LegendRingView
|
||||
android:id="@+id/lrv_right"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
app:lrv_circle_boderW="5dp"
|
||||
app:lrv_circle_center_style="txt"
|
||||
app:lrv_circle_center_txt="材质"
|
||||
app:lrv_circle_center_txt_size="10sp"
|
||||
app:lrv_circle_height="128dp"
|
||||
app:lrv_circle_paddingBottom="12dp"
|
||||
app:lrv_circle_paddingTop="12dp"
|
||||
app:lrv_legend_circle_margin="4dp"
|
||||
app:lrv_legend_columnW="36dp"
|
||||
app:lrv_legend_font_size="10sp"
|
||||
app:lrv_legend_vertical_margin="6dp"
|
||||
app:lrv_offset_left="6dp"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"/>
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".activity.MatrixViewActivity">
|
||||
|
||||
<com.doyou.cv.widget.touch.MatrixView
|
||||
android:id="@+id/miv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.drawerlayout.widget.DrawerLayout
|
||||
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:id="@+id/drawer_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
tools:openDrawer="start">
|
||||
|
||||
<include
|
||||
layout="@layout/app_bar_menu_main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<com.google.android.material.navigation.NavigationView
|
||||
android:id="@+id/nav_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="start"
|
||||
android:fitsSystemWindows="true"
|
||||
app:headerLayout="@layout/nav_header_menu_main"
|
||||
app:menu="@menu/activity_menu_main_drawer"/>
|
||||
|
||||
</androidx.drawerlayout.widget.DrawerLayout>
|
||||
@@ -0,0 +1,154 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
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=".activity.RingViewActivity">
|
||||
|
||||
<com.doyou.cv.widget.progress.ring.RingView
|
||||
android:id="@+id/ringv"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="168dp"
|
||||
android:max="360"
|
||||
android:paddingBottom="@dimen/ringv_pading"
|
||||
android:paddingTop="@dimen/ringv_pading"
|
||||
android:progress="32"
|
||||
app:rv_center_bmp="@drawable/widget_icon_buy"
|
||||
app:rv_mode="circle"
|
||||
app:rv_reachedColor="@color/colorAccent"
|
||||
app:rv_reachedHeight="6dp"
|
||||
app:rv_textColor="#2a2a2a"
|
||||
app:rv_textSize="10sp"
|
||||
app:rv_unReachedColor="@color/colorPrimary"
|
||||
app:rv_unReachedHeight="6dp"/>
|
||||
|
||||
<com.doyou.cv.widget.progress.ring.RingView
|
||||
android:id="@+id/ringv1"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="168dp"
|
||||
android:max="360"
|
||||
android:paddingBottom="@dimen/ringv_pading"
|
||||
android:paddingTop="@dimen/ringv_pading"
|
||||
android:progress="32"
|
||||
app:layout_constraintTop_toBottomOf="@id/ringv"
|
||||
app:rv_center_bmp="@drawable/widget_icon_buy"
|
||||
app:rv_mode="circle"
|
||||
app:rv_outer_enable="true"
|
||||
app:rv_reachedColor="@color/colorAccent"
|
||||
app:rv_reachedHeight="6dp"
|
||||
app:rv_textColor="#2a2a2a"
|
||||
app:rv_textSize="10sp"
|
||||
app:rv_unReachedColor="@color/colorPrimary"
|
||||
app:rv_unReachedHeight="6dp"/>
|
||||
|
||||
<com.doyou.cv.widget.progress.ring.RingView
|
||||
android:id="@+id/ringv2"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="168dp"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:max="360"
|
||||
android:paddingBottom="@dimen/ringv_pading"
|
||||
android:progress="32"
|
||||
app:layout_constraintTop_toBottomOf="@id/ringv1"
|
||||
app:rv_center_bmp="@drawable/widget_icon_person"
|
||||
app:rv_center_style="txt"
|
||||
app:rv_center_txt="这是啥"
|
||||
app:rv_center_txt_color="@color/colorPrimary"
|
||||
app:rv_center_txt_size="14sp"
|
||||
app:rv_mode="more"
|
||||
app:rv_outer_enable="true"
|
||||
app:rv_reachedColor="@color/colorAccent"
|
||||
app:rv_reachedHeight="6dp"
|
||||
app:rv_textColor="#2a2a2a"
|
||||
app:rv_textSize="10sp"
|
||||
app:rv_unReachedColor="@color/colorPrimary"
|
||||
app:rv_unReachedHeight="6dp"/>
|
||||
|
||||
<com.doyou.cv.widget.progress.ring.RingView
|
||||
android:id="@+id/ringv3"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="176dp"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:max="360"
|
||||
android:paddingBottom="@dimen/ringv_pading"
|
||||
android:progress="32"
|
||||
app:layout_constraintTop_toBottomOf="@id/ringv2"
|
||||
app:rv_center_bmp="@drawable/widget_icon_group"
|
||||
app:rv_center_imgtxt_margin="6dp"
|
||||
app:rv_center_style="all"
|
||||
app:rv_center_txt="客群分布"
|
||||
app:rv_center_txt_color="#2a2a2a"
|
||||
app:rv_center_txt_size="14sp"
|
||||
app:rv_mode="group"
|
||||
app:rv_need_cut="true"
|
||||
app:rv_outer_enable="true"
|
||||
app:rv_reachedColor="@color/colorAccent"
|
||||
app:rv_reachedHeight="6dp"
|
||||
app:rv_textColor="#2a2a2a"
|
||||
app:rv_textSize="10sp"
|
||||
app:rv_unReachedColor="@android:color/white"
|
||||
app:rv_unReachedHeight="6dp"/>
|
||||
|
||||
<com.doyou.cv.widget.progress.ring.RingView
|
||||
android:id="@+id/ringv4"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="168dp"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:max="360"
|
||||
android:paddingBottom="@dimen/ringv_pading"
|
||||
android:progress="32"
|
||||
app:layout_constraintTop_toBottomOf="@id/ringv3"
|
||||
app:rv_center_style="double_txt"
|
||||
app:rv_center_txt_color="@color/colorPrimary"
|
||||
app:rv_center_txt_size="14sp"
|
||||
app:rv_mode="more"
|
||||
app:rv_outer_enable="true"
|
||||
app:rv_reachedColor="@color/colorAccent"
|
||||
app:rv_reachedHeight="6dp"
|
||||
app:rv_textColor="#2a2a2a"
|
||||
app:rv_textSize="10sp"
|
||||
app:rv_unReachedColor="@color/colorPrimary"
|
||||
app:rv_unReachedHeight="6dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/refeshBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:text="刷新下"
|
||||
app:layout_constraintTop_toBottomOf="@id/ringv4"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/doubleTxtBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:text="圆环中间显示两行文字"
|
||||
app:layout_constraintTop_toBottomOf="@id/refeshBtn"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/legendBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:text="携带图例的圆环"
|
||||
app:layout_constraintTop_toBottomOf="@id/doubleTxtBtn"/>
|
||||
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/legendBtn"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
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=".activity.RingViewActivity">
|
||||
|
||||
<com.doyou.cv.widget.progress.ring.RingView
|
||||
android:id="@+id/doubleTxtRv"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="168dp"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:max="360"
|
||||
android:paddingBottom="@dimen/ringv_pading"
|
||||
android:progress="32"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:rv_center_style="double_txt"
|
||||
app:rv_center_txt_color="@color/colorPrimary"
|
||||
app:rv_center_txt_size="14sp"
|
||||
app:rv_mode="more"
|
||||
app:rv_outer_enable="true"
|
||||
app:rv_reachedColor="@color/colorAccent"
|
||||
app:rv_reachedHeight="6dp"
|
||||
app:rv_textColor="#2a2a2a"
|
||||
app:rv_textSize="10sp"
|
||||
app:rv_unReachedColor="@color/colorPrimary"
|
||||
app:rv_unReachedHeight="6dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/updateDoubleBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:text="刷新下"
|
||||
app:layout_constraintTop_toBottomOf="@id/doubleTxtRv"/>
|
||||
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/updateDoubleBtn"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
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=".activity.ringview.LegendActivity">
|
||||
|
||||
<!--android:background="#ccc"-->
|
||||
<com.doyou.cv.widget.progress.ring.RingView
|
||||
android:id="@+id/legendRv"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="168dp"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:max="360"
|
||||
android:paddingBottom="12dp"
|
||||
android:progress="32"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:rv_center_style="double_txt"
|
||||
app:rv_center_txt_color="@color/colorPrimary"
|
||||
app:rv_center_txt_size="14sp"
|
||||
app:rv_mode="more"
|
||||
app:rv_outer_enable="true"
|
||||
app:rv_reachedColor="@color/colorAccent"
|
||||
app:rv_reachedHeight="6dp"
|
||||
app:rv_textColor="#2a2a2a"
|
||||
app:rv_textSize="10sp"
|
||||
app:rv_unReachedColor="@color/colorPrimary"
|
||||
app:rv_unReachedHeight="6dp"/>
|
||||
|
||||
<!--android:background="#cfcfcf"-->
|
||||
<com.doyou.cv.widget.legend.LegendView
|
||||
android:id="@+id/legendLv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/legendRv"
|
||||
app:lv_legend_circle_margin="4dp"
|
||||
app:lv_legend_columnW="36dp"
|
||||
app:lv_legend_font_size="10sp"
|
||||
app:lv_legend_offset_left="6dp"
|
||||
app:lv_legend_vertical_margin="6dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/legendRefBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/ringv_pading"
|
||||
android:text="刷新下"
|
||||
app:layout_constraintTop_toBottomOf="@id/legendLv"/>
|
||||
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/legendRefBtn"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,154 @@
|
||||
<?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=".activity.SectionProBarActivity">
|
||||
|
||||
<!-- 普通分段进度条-->
|
||||
<LinearLayout
|
||||
android:id="@+id/normalLl"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintBottom_toTopOf="@id/line1"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="普通分段进度条"
|
||||
android:textColor="@color/page_font"
|
||||
android:textSize="@dimen/page_font_size" />
|
||||
|
||||
<com.doyou.cv.widget.progress.horbar.SectionProBar
|
||||
android:id="@+id/normalSpb"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:max="100"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="32dp"
|
||||
android:paddingRight="24dp"
|
||||
app:hbv_reachedColor="#FF6853"
|
||||
app:hbv_reachedHeight="5dp"
|
||||
app:hbv_unReachedColor="#58b5fa"
|
||||
app:hbv_unReachedHeight="5dp" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/normalSb"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="36dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginRight="36dp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/line1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:background="#E6E6FA"
|
||||
app:layout_constraintBottom_toTopOf="@id/gradientLl"
|
||||
app:layout_constraintTop_toBottomOf="@id/normalLl" />
|
||||
|
||||
<!-- 渐变分段进度条-->
|
||||
<LinearLayout
|
||||
android:id="@+id/gradientLl"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintBottom_toTopOf="@id/line2"
|
||||
app:layout_constraintTop_toBottomOf="@id/line1">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="渐变分段进度条"
|
||||
android:textColor="@color/page_font"
|
||||
android:textSize="@dimen/page_font_size" />
|
||||
|
||||
<com.doyou.cv.widget.progress.horbar.SectionProBar
|
||||
android:id="@+id/gradientSpb"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:max="100"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="32dp"
|
||||
android:paddingRight="24dp"
|
||||
app:hbv_reachedHeight="5dp"
|
||||
app:hbv_unReachedHeight="5dp" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/gradientSb"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="36dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginRight="36dp" />
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/line2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:background="#E6E6FA"
|
||||
app:layout_constraintBottom_toTopOf="@id/animLl"
|
||||
app:layout_constraintTop_toBottomOf="@id/gradientLl" />
|
||||
|
||||
<!-- 渐变分段进度条-->
|
||||
<LinearLayout
|
||||
android:id="@+id/animLl"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/line2">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="分段进度条效果"
|
||||
android:textColor="@color/page_font"
|
||||
android:textSize="@dimen/page_font_size" />
|
||||
|
||||
<com.doyou.cv.widget.progress.horbar.SectionProBar
|
||||
android:id="@+id/animSpb"
|
||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:max="100"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="32dp"
|
||||
android:paddingRight="24dp"
|
||||
app:hbv_reachedHeight="5dp"
|
||||
app:hbv_unReachedHeight="5dp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/animBtn"
|
||||
android:layout_width="320dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="Again"
|
||||
android:textAllCaps="false" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout 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"
|
||||
android:orientation="vertical"
|
||||
tools:context=".activity.ShadowProBarActivity">
|
||||
|
||||
<com.doyou.cv.widget.progress.horbar.ShadowProBar
|
||||
android:id="@+id/spbIng"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="7dp"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:layout_marginTop="24dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/endBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="完成"
|
||||
app:layout_constraintTop_toBottomOf="@id/spbIng"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,177 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
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=".activity.taperchart.TaperChartActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="#cfcfcf"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:text="3张图,3个label"
|
||||
android:textColor="#2a2a2a"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
<com.doyou.cv.widget.taperchart.TaperChart
|
||||
android:id="@+id/tchartV"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/taper_chart_h"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginRight="12dp"
|
||||
app:is_draw_topvalue="true"
|
||||
app:layout_constraintTop_toBottomOf="@id/label1"
|
||||
app:tc_axis_txtsize="@dimen/taper_text_size"
|
||||
app:tc_inner_space="28dp"
|
||||
app:tc_quad_x_offset="42dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="#cfcfcf"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:text="4张图,2个label(显示水平测试线)"
|
||||
android:textColor="#2a2a2a"
|
||||
app:layout_constraintTop_toBottomOf="@id/tchartV"/>
|
||||
|
||||
<com.doyou.cv.widget.taperchart.TaperChart
|
||||
android:id="@+id/tchartV1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/taper_chart_h"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginRight="12dp"
|
||||
app:is_draw_topvalue="true"
|
||||
app:layout_constraintTop_toBottomOf="@id/label2"
|
||||
app:tc_inner_space="28dp"
|
||||
app:tc_mode="fourth"
|
||||
app:tc_quad_x_offset="42dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label3"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="#cfcfcf"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:text="4张图,2个label(y轴百分比)"
|
||||
android:textColor="#2a2a2a"
|
||||
app:layout_constraintTop_toBottomOf="@id/tchartV1"/>
|
||||
|
||||
<com.doyou.cv.widget.taperchart.TaperChart
|
||||
android:id="@+id/tchartV2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/taper_chart_h"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginRight="12dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/label3"
|
||||
app:tc_inner_space="28dp"
|
||||
app:tc_mode="fourth"
|
||||
app:tc_quad_x_offset="42dp"
|
||||
app:tc_yaxis_percent="true"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label4"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="#cfcfcf"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:text="6张图,3个label"
|
||||
android:textColor="#2a2a2a"
|
||||
app:layout_constraintTop_toBottomOf="@id/tchartV2"/>
|
||||
|
||||
<com.doyou.cv.widget.taperchart.TaperChart
|
||||
android:id="@+id/tchartV3"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/taper_chart_h"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginRight="12dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/label4"
|
||||
app:tc_inner_space="28dp"
|
||||
app:tc_mode="fifth"
|
||||
app:tc_quad_x_offset="42dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label5"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="#cfcfcf"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:text="3张图,3个label(两行)"
|
||||
android:textColor="#2a2a2a"
|
||||
app:layout_constraintTop_toBottomOf="@id/tchartV3"/>
|
||||
|
||||
<com.doyou.cv.widget.taperchart.TaperChartLayout
|
||||
android:id="@+id/tchartLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/label5"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label6"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="#cfcfcf"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:text="3张图,3个label(两行 + 自定义颜色 + 单位显示)"
|
||||
android:textColor="#2a2a2a"
|
||||
app:layout_constraintTop_toBottomOf="@id/tchartLayout"/>
|
||||
|
||||
<com.doyou.cv.widget.taperchart.TaperChartLayout
|
||||
android:id="@+id/tchartLayout1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/label6"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label7"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="#cfcfcf"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:text="3张图,6个label(两行 + 自定义颜色 + 单位显示)"
|
||||
android:textColor="#2a2a2a"
|
||||
app:layout_constraintTop_toBottomOf="@id/tchartLayout1"/>
|
||||
|
||||
<com.doyou.cv.widget.taperchart.TaperChartLayout
|
||||
android:id="@+id/tchartLayout2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/label7"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/contrastBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp"
|
||||
android:text="对比峰值图"
|
||||
app:layout_constraintTop_toBottomOf="@id/tchartLayout2"/>
|
||||
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/contrastBtn"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
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=".activity.taperchart.ContrastActivity">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cont_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="#cfcfcf"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:text="6张图,3个label"
|
||||
android:textColor="#2a2a2a"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
<com.doyou.cv.widget.taperchart.TaperChart
|
||||
android:id="@+id/cont_tchart"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/taper_chart_h"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginRight="12dp"
|
||||
app:is_draw_topvalue="true"
|
||||
app:layout_constraintTop_toBottomOf="@id/cont_label"
|
||||
app:tc_inner_space="28dp"
|
||||
app:tc_mode="fifth"
|
||||
app:tc_quad_x_offset="42dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/cont_RefeshBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp"
|
||||
android:text="刷新"
|
||||
app:layout_constraintTop_toBottomOf="@id/cont_tchart"/>
|
||||
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/cont_RefeshBtn"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,36 @@
|
||||
<?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=".activity.taperchart.ScrollTaperChartActivity">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/hor_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="#cfcfcf"
|
||||
android:gravity="center"
|
||||
android:paddingLeft="24dp"
|
||||
android:text="支持水平滑动的峰值图"
|
||||
android:textColor="#2a2a2a"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
|
||||
<com.doyou.cv.widget.taperchart.HorTaperChart
|
||||
android:id="@+id/hor_tchart"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/taper_chart_h"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginRight="12dp"
|
||||
app:htc_is_draw_topValue="true"
|
||||
app:layout_constraintTop_toBottomOf="@id/hor_label"
|
||||
app:htc_inner_space="28dp"
|
||||
app:htc_quad_x_offset="42dp"/>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout 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=".activity.timeruler.TimeRulerActivity">
|
||||
|
||||
<com.doyou.cv.widget.timeruler.TimeRulerView
|
||||
android:id="@+id/ruler_id_timeRulerView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
app:bottomLineColor="#D7D7D7"
|
||||
app:bottomLineStrokeWidth="1dp"
|
||||
app:contentHeight="@dimen/timerulerview_contentheight"
|
||||
app:middleLineColor="#50AC37"
|
||||
app:scaleColor="#D7D7D7"
|
||||
app:scaleLineStrokeWidth="1dp"
|
||||
app:selectBackgroundColor="#E2FCD9"
|
||||
app:showtimeHeight="@dimen/timerulerview_showtimeheight"
|
||||
app:textColors="#626262"
|
||||
app:textFontSize="10sp"
|
||||
app:topLineColor="#D7D7D7"
|
||||
app:topLineStrokeWidth="1dp"
|
||||
app:widthPerScale="35dp" /><!--app:totalTimePerCell="halfHour"-->
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/ruler_id_timerulerpick"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="144dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginRight="14dp">
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/timerulerpick_bg" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:src="@mipmap/timerulerview_plus" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:src="@mipmap/timerulerview_minus" />
|
||||
|
||||
<com.doyou.cvc.activity.timeruler.TimeRulerPickScaleView
|
||||
android:id="@+id/ruler_id_timeRulerPickView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/time_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="60dp"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_below="@+id/ruler_id_timeRulerView"/>
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_reset"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/time_tv"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="50dp"
|
||||
android:text="重置"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,21 @@
|
||||
<?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:id="@+id/transformerContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clipChildren="false"
|
||||
tools:context=".activity.sys.viewpager.ViewPagerTransformerActivity">
|
||||
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
android:id="@+id/transformerVp"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="280dp"
|
||||
android:clipChildren="false"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.doyou.cv.widget.wave.CircleWaveView
|
||||
android:id="@+id/circleWv"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="200dp"
|
||||
android:layout_marginTop="32dp"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/seekBar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/proTv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/txt_black"
|
||||
android:textSize="32dp"
|
||||
tools:text="50%"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
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=".activity.MenuMainActivity">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/AppTheme.AppBarOverlay">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="?attr/colorPrimary"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay"/>
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<include layout="@layout/content_menu_main"/>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_margin="@dimen/fab_margin"
|
||||
app:srcCompat="@android:drawable/ic_dialog_email"/>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
@@ -0,0 +1,150 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||
tools:context=".activity.MenuMainActivity"
|
||||
tools:showIn="@layout/app_bar_menu_main">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/titleTv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="74dp"
|
||||
android:gravity="center"
|
||||
android:text="功能分布如下"
|
||||
android:textColor="@color/page_font"
|
||||
android:textSize="@dimen/page_font_size"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.flexbox.FlexboxLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="16dp"
|
||||
app:alignContent="stretch"
|
||||
app:alignItems="stretch"
|
||||
app:flexDirection="row"
|
||||
app:flexWrap="wrap"
|
||||
app:layout_constraintTop_toBottomOf="@id/titleTv">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/selPtoBarTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="SectionProBar" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/imgTxtTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="图文混排" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ringvTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="RingView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tcTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="TaperChart" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/htcTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="HorTaperChart" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/gradientTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="GradientLine" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/lrvTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="LegendRingView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cpbvTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="CircleProgressBarView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/spbTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="ShadowProBar" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/hcpvTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="HalfCircleProView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/matrixTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="MatrixView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/gpbTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="GradientProBar" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/hssvTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="HorScrollSelectedView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/horTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="HorProBar" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/waveTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="WaveView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/colorMainTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="图片滤镜" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/refreshTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="RefreshView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/timeRulerTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="TimeRulerView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/circleBtnTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="CircleButton" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ctmSvTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="CustomScrollView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/vpTransTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="ViewPagerTransformer" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/imgOverturnTv"
|
||||
style="@style/TextViewStyle"
|
||||
android:text="@string/title_animator_bmp_overturn" />
|
||||
|
||||
</com.google.android.flexbox.FlexboxLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/nav_header_height"
|
||||
android:background="@drawable/side_nav_bar"
|
||||
android:gravity="bottom"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageView"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:contentDescription="@string/nav_header_desc"
|
||||
android:paddingTop="@dimen/nav_header_vertical_spacing"
|
||||
app:srcCompat="@drawable/fighting"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/nav_header_vertical_spacing"
|
||||
android:text="@string/nav_header_title"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/nav_header_subtitle"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.doyou.cv.widget.touch.CustomScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fadeScrollbars="true"
|
||||
android:scrollbars="vertical"
|
||||
android:scrollbarThumbVertical="@drawable/scrollbar_shape"
|
||||
tools:context=".activity.touch.CustomScrollViewActivity" />
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.doyou.cv.widget.touch.RefreshView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".activity.touch.RefreshViewActivity"/>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitXY">
|
||||
|
||||
</ImageView>
|
||||
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:showIn="navigation_view">
|
||||
|
||||
<group android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/nav_wechat"
|
||||
android:icon="@drawable/ic_menu_add_friend"
|
||||
android:title="@string/menu_wechat"/>
|
||||
<item
|
||||
android:id="@+id/nav_qq"
|
||||
android:icon="@drawable/ic_menu_add_friend"
|
||||
android:title="@string/menu_qq"/>
|
||||
<!--<item-->
|
||||
<!--android:id="@+id/nav_slideshow"-->
|
||||
<!--android:icon="@drawable/ic_menu_slideshow"-->
|
||||
<!--android:title="@string/menu_slideshow"/>-->
|
||||
<!--<item-->
|
||||
<!--android:id="@+id/nav_tools"-->
|
||||
<!--android:icon="@drawable/ic_menu_manage"-->
|
||||
<!--android:title="@string/menu_tools"/>-->
|
||||
</group>
|
||||
|
||||
<item android:title="Communicate">
|
||||
<menu>
|
||||
<item
|
||||
android:id="@+id/nav_share"
|
||||
android:icon="@drawable/ic_menu_share"
|
||||
android:title="@string/menu_share"/>
|
||||
<item
|
||||
android:id="@+id/nav_github"
|
||||
android:icon="@drawable/ic_menu_send"
|
||||
android:title="@string/menu_github"/>
|
||||
</menu>
|
||||
</item>
|
||||
|
||||
</menu>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_settings"
|
||||
android:orderInCategory="100"
|
||||
android:title="@string/action_settings"
|
||||
app:showAsAction="never"/>
|
||||
</menu>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user