android+侧边栏动画,Android侧边栏滑动切换的view效果

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

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

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值