Android 联系人列表实现原理
来源:互联网 发布:windows软件卸载 编辑:程序博客网 时间:2024/06/03 22:42
自定义字母分类列表 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); } }); }}
效果
阅读全文
0 0
- Android 联系人列表实现原理
- Android联系人列表实现
- Android使用RecyclerView实现仿微信联系人列表
- Android获取联系人列表
- 原创android联系人列表
- Android 获取联系人列表
- Android 读写联系人列表
- Android 获取联系人列表
- Android中可增删联系人列表的简单实现
- Android实现类似微信联系人中的分组列表
- Android PinnedSectionListView实现滚动标题置顶/联系人列表效果
- Android--实现具有字母检索功能的联系人列表
- Android 联系人A-Z列表布局实现分析。
- Android实现列表仿联系人快速查找和关键字搜索
- Android 调用联系人列表,选择联系人
- 实现联系人列表字母索引
- Android仿联系人列表分组悬浮列表实现,自定义PinnedHeaderListView实现
- android调用系统联系人列表
- HDU 1495 非常可乐
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- 2017.12.21
- AutoCad 页面布局
- MM
- Android 联系人列表实现原理
- Linux 环境配置之 安装 Mysql
- linux struct input_event结构体详解
- 计算机视觉与深度学习(10)
- MediaPlayer本地播放流程解析(3)
- 从RNN到LSTM剖析
- 冒泡算法
- 经典算法
- org/eclipse/jetty/server/Handler : Unsupported major.minor version 52.0