Skip to content

Commit

Permalink
Merge pull request weidongjian#40 from wo5553435/master
Browse files Browse the repository at this point in the history
修复 相同数据下且设置了不循环滚动  滑动监听总是监听第一个数据
  • Loading branch information
weidongjian authored Sep 8, 2017
2 parents 065b6b0 + 0ab905a commit 17d0fda
Showing 1 changed file with 35 additions and 13 deletions.
48 changes: 35 additions & 13 deletions loopview/src/main/java/com/weigan/loopview/LoopView.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.weigan.loopview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Executors;
Expand Down Expand Up @@ -51,7 +52,7 @@ public enum ACTION {
private Paint paintCenterText;
private Paint paintIndicator;

List<String> items;
List<IndexString> items;

int textSize;
int maxTextHeight;
Expand All @@ -75,7 +76,7 @@ public enum ACTION {

int itemsVisibleCount;

HashMap<Integer,String> drawingStrings;
HashMap<Integer,IndexString> drawingStrings;
// HashMap<String,Integer> drawingStr

int measuredHeight;
Expand Down Expand Up @@ -311,11 +312,20 @@ public final void setListener(OnItemSelectedListener OnItemSelectedListener) {
}

public final void setItems(List<String> items) {
this.items = items;

this.items = convertData(items);
remeasure();
invalidate();
}

public List<IndexString> convertData(List<String> items){
List<IndexString> data=new ArrayList<>();
for (int i = 0; i < items.size(); i++) {
data.add(new IndexString(i,items.get(i)));
}
return data;
}

public final int getSelectedItem() {
return selectedItem;
}
Expand Down Expand Up @@ -395,13 +405,13 @@ protected void onDraw(Canvas canvas) {
while (l1 > items.size() - 1) {
l1 = l1 - items.size();
}
drawingStrings.put(k1,items.get(l1));
drawingStrings.put(k1, items.get(l1));
} else if (l1 < 0) {
// drawingStrings[k1] = "";
drawingStrings.put(k1,"");
drawingStrings.put(k1,new IndexString());
} else if (l1 > items.size() - 1) {
// drawingStrings[k1] = "";
drawingStrings.put(k1,"");
drawingStrings.put(k1,new IndexString());
} else {
// drawingStrings[k1] = items.get(l1);
drawingStrings.put(k1,items.get(l1));
Expand All @@ -426,37 +436,36 @@ protected void onDraw(Canvas canvas) {
// first divider
canvas.save();
canvas.clipRect(0, 0, measuredWidth, firstLineY - translateY);
canvas.drawText(drawingStrings.get(i), getTextX(drawingStrings.get(i), paintOuterText, tempRect),
canvas.drawText(drawingStrings.get(i).string, getTextX(drawingStrings.get(i).string, paintOuterText, tempRect),
maxTextHeight, paintOuterText);
canvas.restore();
canvas.save();
canvas.clipRect(0, firstLineY - translateY, measuredWidth, (int) (itemHeight));
canvas.drawText(drawingStrings.get(i), getTextX(drawingStrings.get(i), paintCenterText, tempRect),
canvas.drawText(drawingStrings.get(i).string, getTextX(drawingStrings.get(i).string, paintCenterText, tempRect),
maxTextHeight, paintCenterText);
canvas.restore();
} else if (translateY <= secondLineY && maxTextHeight + translateY >= secondLineY) {
// second divider
canvas.save();
canvas.clipRect(0, 0, measuredWidth, secondLineY - translateY);
canvas.drawText(drawingStrings.get(i), getTextX(drawingStrings.get(i), paintCenterText, tempRect),
canvas.drawText(drawingStrings.get(i).string, getTextX(drawingStrings.get(i).string, paintCenterText, tempRect),
maxTextHeight, paintCenterText);
canvas.restore();
canvas.save();
canvas.clipRect(0, secondLineY - translateY, measuredWidth, (int) (itemHeight));
canvas.drawText(drawingStrings.get(i), getTextX(drawingStrings.get(i), paintOuterText, tempRect),
canvas.drawText(drawingStrings.get(i).string, getTextX(drawingStrings.get(i).string, paintOuterText, tempRect),
maxTextHeight, paintOuterText);
canvas.restore();
} else if (translateY >= firstLineY && maxTextHeight + translateY <= secondLineY) {
// center item
canvas.clipRect(0, 0, measuredWidth, (int) (itemHeight));
canvas.drawText(drawingStrings.get(i), getTextX(drawingStrings.get(i), paintCenterText, tempRect),
canvas.drawText(drawingStrings.get(i).string, getTextX(drawingStrings.get(i).string, paintCenterText, tempRect),
maxTextHeight, paintCenterText);
selectedItem = items.indexOf(drawingStrings.get(i));

} else {
// other item
canvas.clipRect(0, 0, measuredWidth, (int) (itemHeight));
canvas.drawText(drawingStrings.get(i), getTextX(drawingStrings.get(i), paintOuterText, tempRect),
canvas.drawText(drawingStrings.get(i).string, getTextX(drawingStrings.get(i).string, paintOuterText, tempRect),
maxTextHeight, paintOuterText);
}
canvas.restore();
Expand Down Expand Up @@ -543,4 +552,17 @@ public boolean onTouchEvent(MotionEvent event) {
invalidate();
return true;
}

class IndexString {

public IndexString(){
this.string="";
}

public IndexString(int index,String str){
this.index=index;this.string=str;
}
private String string;
private int index;
}
}

0 comments on commit 17d0fda

Please sign in to comment.