SideBar
来源:互联网 发布:网红淘宝店铺排行榜 编辑:程序博客网 时间:2024/05/15 03:45
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.x6.sidebardemo.MainActivity"> <com.example.x6.sidebardemo.SideBar android:id="@+id/slidBar" android:layout_width="20dp" android:layout_height="match_parent" android:layout_alignParentRight="true" /> <TextView android:id="@+id/showTv" android:layout_width="100dp" android:layout_height="100dp" android:text="" android:textSize="60sp" android:gravity="center" android:background="@color/colorBlue" android:visibility="invisible" android:textColor="@color/colorAccent" android:layout_centerInParent="true"/></RelativeLayout>
public class MainActivity extends AppCompatActivity implements ISideBar{ private TextView showTv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SideBar bar = (SideBar) findViewById(R.id.slidBar); bar.setListener(this); showTv = (TextView) findViewById(R.id.showTv); } @Override public void onTouchLetterChanged(String s) { showTv.setText(s); showTv.setVisibility(View.VISIBLE); } @Override public void onTouchUpInVisibility() { showTv.setText(""); showTv.setVisibility(View.INVISIBLE); }}
public class SideBar extends View { private ISideBar listener; private String[] b = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "#"}; private Paint paint = new Paint(); private int height; private int width; private int index = -1; public SideBar(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onFinishInflate() { super.onFinishInflate(); } public void setListener(ISideBar listener){ this.listener = listener; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); /** * 在onFinishInflate() 之后才能获取宽高 */ height = getHeight(); //获取高 width = getWidth(); //获取宽 int singleHeight = height / b.length; //每个字母的高度 for (int i = 0; i < b.length; i++) { if(index == i){ paint.setColor(Color.rgb(70, 171, 255)); }else{ paint.setColor(Color.rgb(00, 00, 00)); } //设置文字的颜色 paint.setTypeface(Typeface.DEFAULT_BOLD); //粗体 paint.setAntiAlias(true); //光滑 paint.setTextSize(50); int x = 0; int y = singleHeight * (i + 1); canvas.drawText(b[i], x, y, paint); paint.reset(); } } /* * dispatchTouchEvent 和 onTouchEvent 区别 * dispatchTouchEvent是用来分发事件的,onTouchEvent是用来处理事件的。 * 先走dispatchTouchEvent然后走onTouchEvent。 * View不执行 onInterceptTouchEvent */ @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); float y = event.getY(); //获取手指在控件上触摸的y坐标 index = (int) (y/height*b.length); // 当前点击的字母 switch (action) { case MotionEvent.ACTION_UP: index = -1; invalidate(); if(listener != null){ //隐藏弹出字母 listener.onTouchUpInVisibility(); } break; default: if(listener != null){ if(index<0 || index >= b.length)return true; listener.onTouchLetterChanged(b[index]); } invalidate(); break; } return true; }}
1 0
- SideBar
- SideBar
- SideBar
- SideBar+ListView
- div#sidebar{}与#sidebar div{}的区别
- div#sidebar{}与#sidebar div{}的区别
- MarkerManager and Sidebar
- SideBar设计案例
- DotNetBar 实现动态SideBar
- Qt:创建SideBar
- Vertical Sidebar Menu
- Qt:创建SideBar
- sublime的sidebar自定义
- SideBar shopping cart file
- Magento定制Sidebar
- 通讯录--快速导航(SideBar)
- 自己动手做sidebar
- 自定义View-SideBar
- 数值的整数次方
- HI3515海思开发板移植3G模块笔记
- yii2 高级框架无法使用yii命令的问题
- 英语学习笔记20170118更新
- Codeforces 677E Vanya and Balloons(暴力+转换) category:
- SideBar
- 研究生期间如何做研究:一些建议
- CentOS7下安装MySQL5.7安装与配置(YUM)
- Java NIO使用及原理分析 (一)
- nGrinder与JMeter的比较
- 新年开篇 | 总结一个技术总监的教训和经验
- Unity学习笔记
- 世界上最完美的公式 ----欧拉公式
- 【欢迎加入图像处理算法交流群】群规贴