欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android侧边栏滑动切换的view效果

程序员文章站 2023-11-19 23:04:16
废话不多说了,直接给大家贴代码了,具体代码如下所示: import android.content.context; import android.grap...

废话不多说了,直接给大家贴代码了,具体代码如下所示:

import android.content.context;
import android.graphics.canvas;
import android.graphics.paint;
import android.graphics.drawable.bitmapdrawable;
import android.util.attributeset;
import android.view.motionevent;
import android.view.view;
public class sidebar extends view {
  private static final int margin_bottom = 2;
  private int mitemheight = 18;
  private onlettertouchlistener monlettertouchlistener;
  private paint mpaint;
  private float mwidthcenter;
  private int backgroundcolor = 0x00f0f0f0;
  private char[] chars = appcommon.indexer_chars;
  public interface onlettertouchlistener {
    public abstract void onpresseddown(int index, char ch);
    public abstract void onpressedup(int index, char ch);
  }
  public sidebar(context context) {
    this(context, null);
  }
  public sidebar(context context, attributeset attrs) {
    this(context, attrs, -1);
  }
  public sidebar(context context, attributeset attrs, int defstyle) {
    super(context, attrs, defstyle);
    init();
  }
  private int starty = 0;//其实位置的y轴坐标
  public sidebar setchars(char[] chars) {
    this.chars = chars;
//   for(int i = 0 ; i < (26 - chars.length) / 2 ; i++){
//     starty += i * mitemheight;
//   }
    init();
    postinvalidate();
    return this;
  }
  private void init() {
    mpaint = new paint();
    mpaint.setcolor(0xffcfcfd0);
    mpaint.setantialias(true);
    mpaint.setfakeboldtext(true);
    mpaint.settextsize(32);
    mpaint.setcolor(getresources().getcolor(r.color.blue));
    mpaint.setsubpixeltext(true);
    mpaint.settextalign(paint.align.center);
    setbackgroundcolor(backgroundcolor);
  }
  public boolean ontouchevent(motionevent event) {
    super.ontouchevent(event);
    int idx = (int) event.gety() / mitemheight;
    if (idx >= chars.length) {
      idx = chars.length - 1;
    } else if (idx < 0) {
      idx = 0;
    }
    if (event.getaction() == motionevent.action_down || event.getaction() == motionevent.action_move) {
      setbackgroundresource(r.color.sidebar_select_background);
      if (monlettertouchlistener != null) {
        monlettertouchlistener.onpresseddown(idx, chars[idx]);
      }
    } else if (event.getaction() == motionevent.action_up) {
      setbackgrounddrawable(new bitmapdrawable());
      setbackgroundcolor(backgroundcolor);
      if (monlettertouchlistener != null) {
        monlettertouchlistener.onpressedup(idx, chars[idx]);
      }
    }
    return true;
  }
  @override
  protected void onsizechanged(int w, int h, int oldw, int oldh) {
    mitemheight = (h - margin_bottom) / 26;
    mwidthcenter = getmeasuredwidth() / 2;
    super.onsizechanged(w, h, oldw, oldh);
  }
  protected void ondraw(canvas canvas) {
    for (int i = 0; i < chars.length; i++) {
      canvas.drawtext(string.valueof(chars[i]), mwidthcenter,starty + mitemheight + (i * mitemheight), mpaint);
    }
    super.ondraw(canvas);
  }
  public void setonlettertouchlistener(onlettertouchlistener listener) {
    monlettertouchlistener = listener;
  }
}

以上所述是小编给大家介绍的android侧边栏滑动切换的view效果,希望对大家有所帮助