国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android仿微信通訊錄滑動(dòng)快速定位功能

2019-10-23 18:34:37
字體:
供稿:網(wǎng)友

先給大家展示下效果圖:

android實(shí)現(xiàn)通訊錄,android,通訊錄滑動(dòng)定位

實(shí)現(xiàn)代碼如下:

下面簡單說下實(shí)現(xiàn)原理。

public class IndexBar extends LinearLayout implements View.OnTouchListener {  private static final String[] INDEXES = new String[]{"#", "A", "B", "C", "D", "E", "F", "G", "H",      "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};  private static final int TOUCHED_BACKGROUND_COLOR = 0x40000000;  private OnIndexChangedListener mListener;  public void setOnIndexChangedListener(OnIndexChangedListener listener) {    mListener = listener;  }  public IndexBar(Context context) {    this(context, null);  }  public IndexBar(Context context, AttributeSet attrs) {    this(context, attrs, 0);  }  public IndexBar(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    init(attrs);  }  private void init(AttributeSet attrs) {    TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.IndexBar);    float indexTextSize = ta.getDimension(R.styleable.IndexBar_indexTextSize, Utils.sp2px(getContext(), 12));    int indexTextColor = ta.getColor(R.styleable.IndexBar_indexTextColor, 0xFF616161);    ta.recycle();    setOrientation(VERTICAL);    setOnTouchListener(this);    for (String index : INDEXES) {      TextView text = new TextView(getContext());      text.setText(index);      text.setTextSize(TypedValue.COMPLEX_UNIT_PX, indexTextSize);      text.setTextColor(indexTextColor);      text.setGravity(Gravity.CENTER);      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1);      text.setLayoutParams(params);      addView(text);    }  }  @Override  public boolean onTouch(View v, MotionEvent event) {    switch (event.getAction()) {      case MotionEvent.ACTION_DOWN:        setBackgroundColor(TOUCHED_BACKGROUND_COLOR);        handle(v, event);        return true;      case MotionEvent.ACTION_MOVE:        handle(v, event);        return true;      case MotionEvent.ACTION_UP:        setBackgroundColor(Color.TRANSPARENT);        handle(v, event);        return true;    }    return super.onTouchEvent(event);  }  private void handle(View v, MotionEvent event) {    int y = (int) event.getY();    int height = v.getHeight();    int position = INDEXES.length * y / height;    if (position < 0) {      position = 0;    } else if (position >= INDEXES.length) {      position = INDEXES.length - 1;    }    String index = INDEXES[position];    boolean showIndicator = event.getAction() != MotionEvent.ACTION_UP;    if (mListener != null) {      mListener.onIndexChanged(index, showIndicator);    }  }  public interface OnIndexChangedListener {    void onIndexChanged(String index, boolean showIndicator);  }}

使用

public class CompanyActivity extends BaseActivity implements IndexBar.OnIndexChangedListener {  @Bind(R.id.lv_company)  ListView lvCompany;  @Bind(R.id.ib_indicator)  IndexBar ibIndicator;  @Bind(R.id.tv_indicator)  TextView tvIndicator;  private List<CompanyEntity> mCompanyList = new ArrayList<>();  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_company);    // ...  }  @Override  public void onIndexChanged(String index, boolean showIndicator) {    int position = -1;    for (CompanyEntity company : mCompanyList) {      if (TextUtils.equals(company.getName(), index)) {        position = mCompanyList.indexOf(company);        break;      }    }    if (position != -1) {      lvCompany.setSelection(position);    }    tvIndicator.setText(index);    tvIndicator.setVisibility(showIndicator ? View.VISIBLE : View.GONE);  }}

繼承自LinearLayout,添加了26個(gè)字母索引TextView,當(dāng)手指滑動(dòng)時(shí)通知Activity更新界面。

核心是OnTouchListener,手指滑動(dòng)的時(shí)候根據(jù)當(dāng)前Y坐標(biāo)計(jì)算出手指所在的索引位置,要注意臨界值。

以上所述是小編給大家介紹的Android仿微信通訊錄滑動(dòng)快速定位功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對VEVB武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 荃湾区| 德安县| 绥芬河市| 清原| 天镇县| 开鲁县| 莱西市| 泰顺县| 石楼县| 通州市| 莱阳市| 上饶市| 海原县| 霍山县| 新密市| 于都县| 安新县| 南昌县| 平果县| 鄂托克前旗| 厦门市| 渑池县| 留坝县| 肃南| 磐安县| 随州市| 恩施市| 板桥市| 东辽县| 莱芜市| 哈巴河县| 太康县| 油尖旺区| 宜良县| 鲁甸县| 灌南县| 吕梁市| 闵行区| 衡山县| 宣威市| 吉首市|