Skip to content

Commit

Permalink
优化
Browse files Browse the repository at this point in the history
  • Loading branch information
wangxiaoyun committed Dec 19, 2019
1 parent 4577e21 commit a338ea4
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 59 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ dependencies {
//butterknife
implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
// implementation project(':easyscrollerchartviewlibrary')
implementation 'com.github.NoEndToLF:EasyScrollerChartView:1.0.1'
implementation project(':easyscrollerchartviewlibrary')
// implementation 'com.github.NoEndToLF:EasyScrollerChartView:1.0.1'
//colorpicker
implementation 'com.github.duanhong169:colorpicker:1.1.6'
//switchbutton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ private void initNoScroll() {
//所有的点
myScrollerPointModelList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
ScrollerPointModel myScrollerPointModel = new ScrollerPointModel(i, ((int) (Math.random() * 5 + 1)) * 5000);
ScrollerPointModel myScrollerPointModel = new ScrollerPointModel(((int) (Math.random() * 5 + 1)) * 5000);
myScrollerPointModelList.add(myScrollerPointModel);
}
escView.setScrollerPointModelList(myScrollerPointModelList);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ private void initScroll(Bundle savedInstanceState) {
if (myScrollerPointModelList == null) {
myScrollerPointModelList = new ArrayList<>();
for (int i = 0; i < 101; i++) {
ScrollerPointModel myScrollerPointModel = new ScrollerPointModel(i, ((int) (Math.random() * 5 + 1)) * 5000);
ScrollerPointModel myScrollerPointModel = new ScrollerPointModel( ((int) (Math.random() * 5 + 1)) * 5000);
myScrollerPointModelList.add(myScrollerPointModel);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,10 @@ public void onRefresh() {
public void run() {
myScrollerPointModelList.clear();
for (int i = 0; i < 101; i++) {
ScrollerPointModel myScrollerPointModel = new ScrollerPointModel(i, ((int) (Math.random() * 5 + 1)) * 5000);
ScrollerPointModel myScrollerPointModel = new ScrollerPointModel( ((int) (Math.random() * 5 + 1)) * 5000);
myScrollerPointModelList.add(myScrollerPointModel);
}
escView.setScrollerPointModelList(myScrollerPointModelList);
escView.notifyDataChanged();
swipe.setRefreshing(false);
escView.setEnableTouch(true);
}
Expand Down Expand Up @@ -246,7 +246,7 @@ private void initScroll(Bundle savedInstanceState) {
if (myScrollerPointModelList == null) {
myScrollerPointModelList = new ArrayList<>();
for (int i = 0; i < 101; i++) {
ScrollerPointModel myScrollerPointModel = new ScrollerPointModel(i, ((int) (Math.random() * 5 + 1)) * 5000);
ScrollerPointModel myScrollerPointModel = new ScrollerPointModel( ((int) (Math.random() * 5 + 1)) * 5000);
myScrollerPointModelList.add(myScrollerPointModel);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
import android.graphics.Rect;
import androidx.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;

import com.wxy.easyscrollerchartview.EasyScrollerChartView;
import com.wxy.easyscrollerchartview.model.DrawPiontModel;
import com.wxy.easyscrollerchartview.model.ScrollerPointModel;

import java.util.List;
Expand All @@ -30,36 +30,31 @@ public MyScrollerChartView(Context context, @Nullable AttributeSet attrs, int de
}
@Override
public void drawContent(Canvas canvas, Point originalPoint, List<? extends ScrollerPointModel> scrollerPointModelList,
int minX, int maxX,
List<DrawPiontModel> drawPiontModelList,
float realHorizontalAverageWidth,
float verticalRegionLength,Rect rect) {

Path path=new Path();
canvas.save();
canvas.clipRect(rect);
for (int i=minX;i<maxX;i++ ){
float x=calculateX(scrollerPointModelList.get(i).getX());
float y=calculateY(scrollerPointModelList.get(i).getY());
for (int i=0;i<drawPiontModelList.size();i++ ){
pointTextPaint.setColor(Color.BLUE);
pointTextPaint.setStrokeWidth(5);
pointTextPaint.setStyle(Paint.Style.STROKE);
if (i==minX){
path.moveTo(x,y);
if (i==0){
path.moveTo(drawPiontModelList.get(i).getX(),drawPiontModelList.get(i).getY());
}else {
path.lineTo(x,y);
path.lineTo(drawPiontModelList.get(i).getX(),drawPiontModelList.get(i).getY());
}
canvas.drawPath(path,pointTextPaint);
}
canvas.restore();
canvas.save();
canvas.clipRect(new Rect(rect.left-10,rect.top,rect.right,rect.bottom));
for (int i=minX;i<maxX;i++ ){
float x=calculateX(scrollerPointModelList.get(i).getX());
float y=calculateY(scrollerPointModelList.get(i).getY());
for (DrawPiontModel drawPiontModel:drawPiontModelList){
pointTextPaint.setColor(Color.RED);
pointTextPaint.setStyle(Paint.Style.FILL);
canvas.drawCircle(x,
y,10,pointTextPaint);
canvas.drawCircle(drawPiontModel.getX(),
drawPiontModel.getY(),10,pointTextPaint);
}
canvas.restore();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
import android.view.ViewConfiguration;
import android.widget.Scroller;

import com.wxy.easyscrollerchartview.model.DrawPiontModel;
import com.wxy.easyscrollerchartview.model.ScrollerPointModel;

import java.util.ArrayList;
import java.util.List;


Expand Down Expand Up @@ -69,10 +71,9 @@ public float getHorizontalAverageWeight() {
private int mActivePointerId;
private final int INVALID_POINTER = -1;
private int minX,maxX,minX_horizontalCoordinates,maxX_horizontalCoordinates;
private int mLastX_dispatch,mLastY_dispatch ;
private boolean isDrawVerticalLine;
private boolean isDrawHorizontalLine;

private List<DrawPiontModel> drawPiontModelList;
public void setEnableTouch(boolean enableTouch) {
this.enableTouch = enableTouch;
}
Expand Down Expand Up @@ -131,7 +132,7 @@ public EasyScrollerChartView(Context context, @Nullable AttributeSet attrs) {
pointTextPaint.setTextAlign(Paint.Align.CENTER);
pointTextPaint.setTextSize(40);
pointTextPaint.setColor(Color.BLACK);

drawPiontModelList=new ArrayList<>();
scroller=new Scroller(context);
isDrawHorizontalLine=true;
isDrawVerticalLine=true;
Expand Down Expand Up @@ -267,7 +268,7 @@ protected void onDraw(Canvas canvas) {
/**画横坐标的刻度值*/
drawHorizontalLineCoordinates(canvas,originalPoint);
/**画所有的点*/
drawContent(canvas,originalPoint,scrollerPointModelList,minX,maxX,horizontalAverageWidth/horizontalAverageWeight,
drawContent(canvas,originalPoint,scrollerPointModelList,drawPiontModelList,horizontalAverageWidth/horizontalAverageWeight,
verticalRegionLength,new Rect(originalPoint.x+getScrollX(),getPaddingTop(),getWidth()-getPaddingRight()+getScrollX(),getHeight()-getPaddingBottom()));
if (saveInstanceStateScrollX!=0){
scrollTo((int)(saveInstanceStateScrollX*(getWidth()-getPaddingRight()-originalPoint.x)),0);
Expand All @@ -289,6 +290,13 @@ public void calculateSide(float horizontalAverageWidth) {

minX_horizontalCoordinates=minX_horizontalCoordinates>=0?minX_horizontalCoordinates:0;
maxX_horizontalCoordinates=maxX_horizontalCoordinates<=horizontalCoordinatesList.size()?maxX_horizontalCoordinates:horizontalCoordinatesList.size();
//准备可画的数据
drawPiontModelList.clear();
for (int i=minX;i<maxX;i++ ){
DrawPiontModel drawPiontModel=new DrawPiontModel(calculateX(i),calculateY(scrollerPointModelList.get(i).getY()));
drawPiontModelList.add(drawPiontModel);
}

}
//转化成相对当前坐标系的坐标
public float calculateX(float x) {
Expand Down Expand Up @@ -319,7 +327,7 @@ protected void drawVerticalLine(Canvas canvas) {
}

public abstract void drawContent(Canvas canvas, Point originalPoint, List<? extends ScrollerPointModel> scrollerPointModelList,
int minX, int maxX,
List<DrawPiontModel> drawPiontModelList,
float RealhorizontalAverageWidth,
float verticalRegionLength, Rect rect);

Expand Down Expand Up @@ -470,7 +478,7 @@ public boolean onTouchEvent(MotionEvent event) {
}
int dx = (int) event.getX(activePointerIndex) - mLastX;

if (getScrollX() < 0 || getScrollX() >= ((scrollerPointModelList.size()+horizontalMin) * horizontalAverageWidth - ((getWidth() - getPaddingRight() - originalPoint.x)))) {
if (getScrollX() < 0 || getScrollX() >= ((scrollerPointModelList.size()+horizontalMin) * (horizontalAverageWidth/horizontalAverageWeight) - ((getWidth() - getPaddingRight() - originalPoint.x)))) {
dx =(int) (dx * scrollSideDamping);
}
scrollBy(-dx, 0);
Expand All @@ -484,8 +492,8 @@ public boolean onTouchEvent(MotionEvent event) {
if (getScrollX() < 0) {
scroller.startScroll(getScrollX(), 0, -getScrollX(), 0, 800);
invalidate();
} else if (getScrollX() >= ((scrollerPointModelList.size()+horizontalMin) * horizontalAverageWidth - ((getWidth() - getPaddingRight() - originalPoint.x)))) {
scroller.startScroll(getScrollX(), 0, (int) ((scrollerPointModelList.size()+horizontalMin) * horizontalAverageWidth - (getWidth() - getPaddingRight() - originalPoint.x) - getScrollX()), 0, 800);
} else if (getScrollX() >= ((scrollerPointModelList.size()+horizontalMin) * (horizontalAverageWidth/horizontalAverageWeight) - ((getWidth() - getPaddingRight() - originalPoint.x)))) {
scroller.startScroll(getScrollX(), 0, (int) ((scrollerPointModelList.size()+horizontalMin) * (horizontalAverageWidth/horizontalAverageWeight) - (getWidth() - getPaddingRight() - originalPoint.x) - getScrollX()), 0, 800);
invalidate();
}
}
Expand All @@ -498,31 +506,31 @@ public boolean onTouchEvent(MotionEvent event) {
if (Math.abs(clickX)<= ViewConfiguration.get(getContext()).getScaledTouchSlop()&&
Math.abs(clickY)<= ViewConfiguration.get(getContext()).getScaledTouchSlop()){
if (onClickListener!=null){
onClickListener.onClick(((event.getX()+getScrollX())-originalPoint.x)/horizontalAverageWidth*horizontalAverageWeight-horizontalMin,
onClickListener.onClick(((event.getX()+getScrollX())-originalPoint.x)/(horizontalAverageWidth/horizontalAverageWeight)*horizontalAverageWeight-horizontalMin,
(originalPoint.y- event.getY())/verticalRegionLength*(verticalMax-verticalMin)+verticalMin);
}
if (isScoll){
if (getScrollX()<0){
scroller.startScroll(getScrollX(),0,-getScrollX(),0,800);
invalidate();
}else if (getScrollX()>=((scrollerPointModelList.size()+horizontalMin) *horizontalAverageWidth-((getWidth()-getPaddingRight()-originalPoint.x)))){
scroller.startScroll(getScrollX(),0,(int) ((scrollerPointModelList.size()+horizontalMin) *horizontalAverageWidth-(getWidth()-getPaddingRight()-originalPoint.x)-getScrollX()),0,800);
}else if (getScrollX()>=((scrollerPointModelList.size()+horizontalMin) *(horizontalAverageWidth/horizontalAverageWeight)-((getWidth()-getPaddingRight()-originalPoint.x)))){
scroller.startScroll(getScrollX(),0,(int) ((scrollerPointModelList.size()+horizontalMin) *(horizontalAverageWidth/horizontalAverageWeight)-(getWidth()-getPaddingRight()-originalPoint.x)-getScrollX()),0,800);
invalidate();
}}
}else {
if (isScoll){
if (getScrollX()<0){
scroller.startScroll(getScrollX(),0,-getScrollX(),0,800);
invalidate();
}else if (getScrollX()>=((scrollerPointModelList.size()+horizontalMin) *horizontalAverageWidth-((getWidth()-getPaddingRight()-originalPoint.x)))){
scroller.startScroll(getScrollX(),0,(int) ((scrollerPointModelList.size()+horizontalMin) *horizontalAverageWidth-(getWidth()-getPaddingRight()-originalPoint.x)-getScrollX()),0,800);
}else if (getScrollX()>=((scrollerPointModelList.size()+horizontalMin) *(horizontalAverageWidth/horizontalAverageWeight)-((getWidth()-getPaddingRight()-originalPoint.x)))){
scroller.startScroll(getScrollX(),0,(int) ((scrollerPointModelList.size()+horizontalMin) *(horizontalAverageWidth/horizontalAverageWeight)-(getWidth()-getPaddingRight()-originalPoint.x)-getScrollX()),0,800);
invalidate();
}else{
final int pointerId = event.getPointerId(0);
mVelocityTracker.computeCurrentVelocity(1000, ViewConfiguration.getMaximumFlingVelocity());
final int velocityX = (int)mVelocityTracker.getXVelocity(pointerId);
isFling=true;
scroller.fling(getScrollX(),0,-velocityX,0,-(getWidth()-getPaddingRight()-originalPoint.x),(int) (scrollerPointModelList.size()*horizontalAverageWidth)+(getWidth()-getPaddingRight()-originalPoint.x),0,0);
scroller.fling(getScrollX(),0,-velocityX,0,-(getWidth()-getPaddingRight()-originalPoint.x),(int) (scrollerPointModelList.size()*(horizontalAverageWidth/horizontalAverageWeight))+(getWidth()-getPaddingRight()-originalPoint.x),0,0);
invalidate();
if (mVelocityTracker != null) {
mVelocityTracker.clear();
Expand Down Expand Up @@ -575,9 +583,9 @@ public void computeScroll() {
scroller.startScroll(getScrollX(),0,-getScrollX(),0,800);
invalidate();
}
else if (getScrollX()>=((scrollerPointModelList.size()+horizontalMin) *horizontalAverageWidth-((getWidth()-getPaddingRight()-originalPoint.x)))){
else if (getScrollX()>=((scrollerPointModelList.size()+horizontalMin) *(horizontalAverageWidth/horizontalAverageWeight)-((getWidth()-getPaddingRight()-originalPoint.x)))){
isFling=false;
scroller.startScroll(getScrollX(),0,(int) ( ((scrollerPointModelList.size()+horizontalMin) *horizontalAverageWidth-((getWidth()-getPaddingRight()-originalPoint.x)))-getScrollX()),0,800);
scroller.startScroll(getScrollX(),0,(int) ( ((scrollerPointModelList.size()+horizontalMin) *(horizontalAverageWidth/horizontalAverageWeight)-((getWidth()-getPaddingRight()-originalPoint.x)))-getScrollX()),0,800);
invalidate();
}
}else {
Expand All @@ -587,10 +595,10 @@ else if (getScrollX()>=((scrollerPointModelList.size()+horizontalMin) *horizonta
scroller.startScroll(getScrollX(),0,-getScrollX(),0,800);
invalidate();

}else if (getScrollX()>= ((scrollerPointModelList.size()+horizontalMin) *horizontalAverageWidth-((getWidth()-getPaddingRight()-originalPoint.x))+((getWidth()-getPaddingRight()-originalPoint.x))/2)){
}else if (getScrollX()>= ((scrollerPointModelList.size()+horizontalMin) *(horizontalAverageWidth/horizontalAverageWeight)-((getWidth()-getPaddingRight()-originalPoint.x))+((getWidth()-getPaddingRight()-originalPoint.x))/2)){
scroller.abortAnimation();
isFling=false;
scroller.startScroll(getScrollX(),0,(int) ( ((scrollerPointModelList.size()+horizontalMin) *horizontalAverageWidth-((getWidth()-getPaddingRight()-originalPoint.x)))-getScrollX()),0,800);
scroller.startScroll(getScrollX(),0,(int) ( ((scrollerPointModelList.size()+horizontalMin) *(horizontalAverageWidth/horizontalAverageWeight)-((getWidth()-getPaddingRight()-originalPoint.x)))-getScrollX()),0,800);
invalidate();
}else {
scrollTo(scroller.getCurrX(), scroller.getCurrY());
Expand Down Expand Up @@ -667,6 +675,7 @@ public List<? extends ScrollerPointModel> getScrollerPointModelList() {

public void setScrollerPointModelList(List<? extends ScrollerPointModel> scrollerPointModelList) {
this.scrollerPointModelList = scrollerPointModelList;
originalPoint=null;
invalidate();
}

Expand All @@ -693,15 +702,15 @@ public void reSetCoordinates() {
public void notifySettingChanged() {
invalidate();
}
public void notifyDataChanged() {
originalPoint=null;
invalidate();
}
public interface onClickListener{
void onClick(float x,float y);
}
public interface onPromiseParentTouchListener{
void onPromiseTouch(boolean promise);
}
public enum ScrollDirection{
PullDown,
UpSlip,
None,
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.wxy.easyscrollerchartview.model;

public class DrawPiontModel {
private float x;
private float y;

public DrawPiontModel(float x, float y) {
this.x = x;
this.y = y;
}

public float getX() {
return x;
}

public void setX(float x) {
this.x = x;
}

public float getY() {
return y;
}

public void setY(float y) {
this.y = y;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,14 @@
import android.os.Parcelable;

public class ScrollerPointModel implements Parcelable {
protected float x;
protected float y;
public float getX() {
return x;
}

public void setX(float x) {
this.x = x;
}

public float getY() {
return y;
}

public void setY(float y) {
this.y = y;
}

public ScrollerPointModel(long x, long y) {
this.x = x;
public ScrollerPointModel(long y) {
this.y = y;
}

Expand All @@ -34,12 +22,10 @@ public int describeContents() {

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeFloat(this.x);
dest.writeFloat(this.y);
}

protected ScrollerPointModel(Parcel in) {
this.x = in.readFloat();
this.y = in.readFloat();
}

Expand Down

0 comments on commit a338ea4

Please sign in to comment.