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

发布时间 - 2026-01-11 00:23:15    点击率:

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

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


# android  # 侧边栏滑动切换  # 侧边栏  # Android实现滑动侧边栏  # Android 实现带字母索引的侧边栏功能  # Android仿微信通讯录列表侧边栏效果  # Android仿人人网滑动侧边栏效果  # Android 开源项目侧边栏菜单(SlidingMenu)使用详解  # Android实现仿通讯录侧边栏滑动SiderBar效果代码  # Android自定义字母选择侧边栏  # 给大家  # 小编  # 在此  # 说了  # 不多  # 所示  # 所述  # 给我留言  # 感谢大家  # 疑问请  # 有任何  # mPaint  # mOnLetterTouchListener  # OnLetterTouchListener  # backgroundColor  # mWidthCenter  # float  # int  # final  # static 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  专业商城网站制作公司有哪些,pi商城官网是哪个?  使用C语言编写圣诞表白程序  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  高防服务器:AI智能防御DDoS攻击与数据安全保障  Python并发异常传播_错误处理解析【教程】  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  JavaScript中的标签模板是什么_它如何扩展字符串功能  如何在橙子建站中快速调整背景颜色?  网站建设整体流程解析,建站其实很容易!  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel怎么实现模型属性的自动加密  如何用低价快速搭建高质量网站?  如何快速搭建安全的FTP站点?  活动邀请函制作网站有哪些,活动邀请函文案?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  html如何与html链接_实现多个HTML页面互相链接【互相】  重庆市网站制作公司,重庆招聘网站哪个好?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  如何确保西部建站助手FTP传输的安全性?  如何用VPS主机快速搭建个人网站?  Laravel如何自定义分页视图?(Pagination示例)  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何确保FTP站点访问权限与数据传输安全?  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  如何用PHP快速搭建高效网站?分步指南  怎么用AI帮你设计一套个性化的手机App图标?  如何在阿里云通过域名搭建网站?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  如何快速查询域名建站关键信息?  如何在新浪SAE免费搭建个人博客?  Thinkphp 中 distinct 的用法解析  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  iOS发送验证码倒计时应用  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性