版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24078843/article/details/78864677
自定义字母分类列表 A-Z
/**
* 参考: https://github.com/DaxiaK/MyDiary 联系人列表
*/
public class SortLayout extends LinearLayout {
public interface OnTouchLetterChangedListener {
void onTouchLetterChanged(String s);
}
private OnTouchLetterChangedListener onTouchLetterChangedListener;
public void setOnTouchLetterChangedListener(OnTouchLetterChangedListener onTouchLetterChangedListener) {
this.onTouchLetterChangedListener = onTouchLetterChangedListener;
}
private Context mContext;
private TextView sortTextView;
private List<String> sortTextList = new ArrayList<>();
private int choose = -1;
public void setSortTextView(TextView sortTextView) {
this.sortTextView = sortTextView;
}
public SortLayout(Context context) {
this(context, null);
}
public SortLayout(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public SortLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext = context;
setOrientation(VERTICAL);
initSortText();
}
private void initSortText() {
addView(buildSortText("↑"));
addView(buildSortText("❤"));
for (char i = 'A'; i <= 'Z'; i++) {
addView(buildSortText(String.valueOf(i)));
}
addView(buildSortText("#"));
}
private TextView buildSortText(String sortText) {
sortTextList.add(sortText);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1);
TextView sortTextView = new TextView(mContext);
sortTextView.setLayoutParams(layoutParams);
sortTextView.setGravity(Gravity.CENTER);
sortTextView.setClickable(true);
sortTextView.setText(sortText);
sortTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13);
sortTextView.setTextColor(Color.BLACK);
return sortTextView;
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
final float y = ev.getY();
final int oldChoose = choose;
final OnTouchLetterChangedListener listener = onTouchLetterChangedListener;
final int clickItem = (int) (y / getHeight() * sortTextList.size());
switch (ev.getAction()) {
case MotionEvent.ACTION_UP:
setBackgroundColor(Color.TRANSPARENT);
choose = -1;
invalidate();
if (sortTextView != null) {
sortTextView.setVisibility(View.GONE);
}
break;
//touch move & down
default:
setBackgroundColor(Color.parseColor("#aacccccc"));
if (oldChoose != clickItem) {
if (clickItem >=0 && clickItem < sortTextList.size()) {
if (listener != null) {
listener.onTouchLetterChanged(sortTextList.get(clickItem));
}
if (sortTextView != null) {
sortTextView.setText(sortTextList.get(clickItem));
sortTextView.setVisibility(View.VISIBLE);
}
choose = clickItem;
invalidate();
}
}
break;
}
return true;
// return super.dispatchTouchEvent(ev);
}
布局
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<com.example.alex.viewpagerdemo.sortlayout.SortLayout
android:id="@+id/sort_layout"
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:background="@android:color/transparent"
android:layout_alignParentRight="true">
</com.example.alex.viewpagerdemo.sortlayout.SortLayout>
<TextView
android:id="@+id/sort_text_view"
android:layout_width="80dp"
android:layout_height="80dp"
android:gravity="center"
android:background="#cccccccc"
android:layout_centerInParent="true"
android:visibility="gone"
android:textSize="24sp"/>
</RelativeLayout>
MainActivity
public class SortLayoutActivity extends AppCompatActivity {
SortLayout sortLayout;
TextView sortTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sort_layout);
sortLayout = (SortLayout) findViewById(R.id.sort_layout);
sortTextView = (TextView) findViewById(R.id.sort_text_view);
sortLayout.setSortTextView(sortTextView);
sortLayout.setOnTouchLetterChangedListener(new SortLayout.OnTouchLetterChangedListener() {
@Override
public void onTouchLetterChanged(String s) {
Log.d("SortLayout", s);
}
});
}
}
效果