首页 > 系统 > Android > 正文

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

2019-12-12 03:16:26
字体:
来源:转载
供稿:网友

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

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效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表