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效果,希望对大家有所帮助