diff --git a/lib/src/main/java/com/github/wangyiqian/stockchart/IStockChart.kt b/lib/src/main/java/com/github/wangyiqian/stockchart/IStockChart.kt index 9bab89f..fd47e6f 100644 --- a/lib/src/main/java/com/github/wangyiqian/stockchart/IStockChart.kt +++ b/lib/src/main/java/com/github/wangyiqian/stockchart/IStockChart.kt @@ -79,4 +79,10 @@ interface IStockChart { * 获取显示区域最后一个不为空的K线数据点下标 */ fun findFirstNotEmptyKEntityIdxInDisplayArea(): Int? + + /** + * 获取缩放比例 + */ + fun getTotalScaleX(): Float + } \ No newline at end of file diff --git a/lib/src/main/java/com/github/wangyiqian/stockchart/MatrixHelper.kt b/lib/src/main/java/com/github/wangyiqian/stockchart/MatrixHelper.kt index 9323b18..b3a6a5e 100644 --- a/lib/src/main/java/com/github/wangyiqian/stockchart/MatrixHelper.kt +++ b/lib/src/main/java/com/github/wangyiqian/stockchart/MatrixHelper.kt @@ -76,15 +76,19 @@ class MatrixHelper(private val stockChart: IStockChart) { scalePx = tmp2FloatArray[0] } + // 目前总共缩放了多少 + fun getTotalScaleX(): Float{ + xScaleMatrix.getValues(tmp9FloatArray) + return tmp9FloatArray[Matrix.MSCALE_X] + } + /** * 处理双指缩放 */ fun handleTouchScale(scaleFactor: Float) { fixXScaleMatrix.reset() - // 计算目前总共缩放了多少 - xScaleMatrix.getValues(tmp9FloatArray) - val totalScaleX = tmp9FloatArray[Matrix.MSCALE_X] + val totalScaleX = getTotalScaleX() // 计算在限制范围内要缩放多少 var targetScaleFactor = when { diff --git a/lib/src/main/java/com/github/wangyiqian/stockchart/StockChart.kt b/lib/src/main/java/com/github/wangyiqian/stockchart/StockChart.kt index 49fc614..5900d4d 100644 --- a/lib/src/main/java/com/github/wangyiqian/stockchart/StockChart.kt +++ b/lib/src/main/java/com/github/wangyiqian/stockchart/StockChart.kt @@ -177,6 +177,8 @@ class StockChart @JvmOverloads constructor(context: Context, attrs: AttributeSet return result } + override fun getTotalScaleX() = matrixHelper.getTotalScaleX() + private fun checkChildViews() { var needReAddViews = false // 是否需要重新添加view var needRequestLayout = false // 是否需要重新requestLayout @@ -325,6 +327,7 @@ class StockChart @JvmOverloads constructor(context: Context, attrs: AttributeSet if (getConfig().scaleAble) { requestDisallowInterceptTouchEvent(true) matrixHelper.handleTouchScale(scaleFactor) + getConfig().getOnGestureListeners().forEach { it.onScaling(getTotalScaleX()) } } } diff --git a/lib/src/main/java/com/github/wangyiqian/stockchart/StockChartConfig.kt b/lib/src/main/java/com/github/wangyiqian/stockchart/StockChartConfig.kt index 44541b0..8634cde 100644 --- a/lib/src/main/java/com/github/wangyiqian/stockchart/StockChartConfig.kt +++ b/lib/src/main/java/com/github/wangyiqian/stockchart/StockChartConfig.kt @@ -17,6 +17,7 @@ import androidx.annotation.ColorInt import androidx.annotation.UiThread import com.github.wangyiqian.stockchart.childchart.base.* import com.github.wangyiqian.stockchart.entities.IKEntity +import com.github.wangyiqian.stockchart.listener.OnGestureListener import com.github.wangyiqian.stockchart.listener.OnLoadMoreListener import com.github.wangyiqian.stockchart.util.checkMainThread @@ -139,10 +140,29 @@ class StockChartConfig { // 背景网格线条宽度 var gridLineStrokeWidth = DEFAULT_GRID_LINE_STROKE_WIDTH + // 加载更多监听 + var onLoadMoreListener: OnLoadMoreListener? = null + set(value) { + field?.apply { removeOnLoadMoreListener(this) } + value?.apply { addOnLoadMoreListener(this)} + field = value + + } + + // 手势监听 + var onGestureListener: OnGestureListener? = null + set(value) { + field?.apply { removeOnGestureListener(this) } + value?.apply { addOnGestureListener(this) } + field = value + } + val childChartFactories = mutableListOf>() private var onLoadMoreListeners = mutableSetOf() + private var onGestureListeners = mutableSetOf() + fun addChildCharts(vararg childChartFactories: AbsChildChartFactory<*>) { this.childChartFactories.addAll(childChartFactories.toList()) } @@ -251,4 +271,20 @@ class StockChartConfig { fun getOnLoadMoreListeners() = onLoadMoreListeners + /** + * 添加手势监听 + */ + fun addOnGestureListener(listener: OnGestureListener){ + onGestureListeners.add(listener) + } + + /** + * 移除手势监听 + */ + fun removeOnGestureListener(listener: OnGestureListener){ + onGestureListeners.remove(listener) + } + + fun getOnGestureListeners() = onGestureListeners + } \ No newline at end of file diff --git a/lib/src/main/java/com/github/wangyiqian/stockchart/listener/OnGestureListener.kt b/lib/src/main/java/com/github/wangyiqian/stockchart/listener/OnGestureListener.kt new file mode 100644 index 0000000..59effce --- /dev/null +++ b/lib/src/main/java/com/github/wangyiqian/stockchart/listener/OnGestureListener.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2021 WangYiqian + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + * + */ + +package com.github.wangyiqian.stockchart.listener + +/** + * @author wangyiqian E-mail: wangyiqian9891@gmail.com + * @version 创建时间: 2021/11/29 + */ +interface OnGestureListener { + + /** + * 是否正在缩放 + */ + fun onScaling(totalScaleX: Float){} +} \ No newline at end of file diff --git a/samples/src/main/java/com/github/wangyiqian/stockchart/sample/sample2/Sample2Activity.kt b/samples/src/main/java/com/github/wangyiqian/stockchart/sample/sample2/Sample2Activity.kt index f5ff5b4..16f6cb5 100644 --- a/samples/src/main/java/com/github/wangyiqian/stockchart/sample/sample2/Sample2Activity.kt +++ b/samples/src/main/java/com/github/wangyiqian/stockchart/sample/sample2/Sample2Activity.kt @@ -15,6 +15,7 @@ package com.github.wangyiqian.stockchart.sample.sample2 import android.graphics.Color import android.os.Bundle +import android.util.Log import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity @@ -34,6 +35,7 @@ import com.github.wangyiqian.stockchart.entities.EmptyKEntity import com.github.wangyiqian.stockchart.entities.Highlight import com.github.wangyiqian.stockchart.entities.IKEntity import com.github.wangyiqian.stockchart.index.Index +import com.github.wangyiqian.stockchart.listener.OnGestureListener import com.github.wangyiqian.stockchart.listener.OnHighlightListener import com.github.wangyiqian.stockchart.listener.OnLoadMoreListener import com.github.wangyiqian.stockchart.sample.DataMock @@ -44,6 +46,7 @@ import com.github.wangyiqian.stockchart.sample.sample2.custom.CustomChartFactory import com.github.wangyiqian.stockchart.util.DimensionUtil import com.github.wangyiqian.stockchart.util.NumberFormatUtil import kotlinx.android.synthetic.main.activity_sample2.* +import kotlinx.android.synthetic.main.activity_sample3.* import kotlinx.android.synthetic.main.layout_sample2_option_buttons.* /** @@ -159,7 +162,7 @@ class Sample2Activity : AppCompatActivity() { gridHorizontalLineCount = 4 // 设置滑动到左边界加载更多 - addOnLoadMoreListener(object : OnLoadMoreListener { + onLoadMoreListener = object : OnLoadMoreListener { override fun onLeftLoadMore() { if (!isLoading) { if (period != Period.FIVE_DAYS @@ -174,7 +177,7 @@ class Sample2Activity : AppCompatActivity() { } override fun onRightLoadMore() {} - }) + } }