系统不支持快速滚动栏在左侧,没事,自己写一个:效果如下:
控件类:
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class LPFastScrollBar extends View {
OnChangeFastScrollPlaceListener onChangeFastScrollPlaceListener;
private float currentY = 0;
private float savedY = 0;
private float downY = 0;
private Bitmap bitFastScroll;
private int viewWidth = 0;
private int viewHeight = 0;
private int barWidth = 0;
private int barHeight = 0;
public LPFastScrollBar(Context context) {
super(context);
initParams();
}
public LPFastScrollBar(Context context, AttributeSet attrs) {
super(context, attrs);
initParams();
}
private void initParams(){
bitFastScroll = BitmapFactory.decodeResource(getResources(), R.drawable.ca_sc_003);
barWidth = bitFastScroll.getWidth();
barHeight = bitFastScroll.getHeight();
}
public int getBarWidth(){
return barWidth;
}
public void setCurrentPlace(float precent){
currentY = (viewHeight - barHeight) * precent;
savedY = currentY;
invalidate();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(barWidth, heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(viewWidth == 0 || viewHeight == 0){
viewWidth = getWidth();
viewHeight = getHeight();
}
Log.d("fast", "viewHeight:"+viewHeight);
Paint paint = new Paint();
canvas.drawBitmap(bitFastScroll, 0, currentY, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
currentY = savedY;
downY = eventY;
Log.d("fast", "down:"+currentY);
break;
case MotionEvent.ACTION_MOVE:
if((int)(savedY + eventY - downY) >= 0 && (int)(savedY + eventY - downY) <= (viewHeight - barHeight)){
currentY = savedY + eventY - downY;
float precent = currentY / (viewHeight - barHeight);
onChangeFastScrollPlaceListener.onTouchingLetterChanged(precent);
onChangeFastScrollPlaceListener.onState(true);
}
Log.d("fast", "move:"+currentY);
break;
case MotionEvent.ACTION_UP:
savedY = currentY;
onChangeFastScrollPlaceListener.onState(false);
Log.d("fast", "up:"+currentY);
break;
}
invalidate();
return true;
}
public void setOnChangeFastScrollPlace(OnChangeFastScrollPlaceListener onChangeListener){
this.onChangeFastScrollPlaceListener = onChangeListener;
}
public interface OnChangeFastScrollPlaceListener{
public void onTouchingLetterChanged(float precent);
public void onState(boolean isMoving);
}
}
调用方法:
listMain = (ListView) findViewById(R.id.listView1);
listMain.setAdapter(new MyBaseAdapter());
lpFastScrollBar = (LPFastScrollBar) findViewById(R.id.fastScrollBar1);
lpFastScrollBar
.setOnChangeFastScrollPlace(new OnChangeFastScrollPlaceListener() {
@Override
public void onTouchingLetterChanged(float precent) {
// TODO Auto-generated method stub
isFastScrolling = true;
if(listMain.getCount() > 0)
listMain.setSelection((int) ((listMain.getCount() - listMain.getHeight() / listMain.getChildAt(0).getHeight()) * precent));
}
@Override
public void onState(boolean isMoving) {
// TODO Auto-generated method stub
isFastScrolling = isMoving;
}
});
listMain.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (curVisibleItemCount == 0) {
curVisibleItemCount = visibleItemCount - 1;
}
if (!isFastScrolling) {
lpFastScrollBar.setCurrentPlace((float) firstVisibleItem
/ (totalItemCount - visibleItemCount));
}
}
});
分享到:
相关推荐
关于该项目我试着写一个快速滚动条。 您可以轻松地在您的应用程序中使用它。如何使用在您的项目中导入 FastScrollBar.java。 例如,将其添加到您的布局中< FrameLayout xmlns : android = " ...
jquery 自定义scroll bar
一款简单实用的jQuery+mousescroll.js自定义美化div滚动条插件,把普通的网页滚动条进行美化,同一页面也可以多次调用。
自定义滚动条 scroll js滚动条 jquery.js jscroll.js 修改图片就可以实现多种样式滚动条
jQuery table scroll表格插件内容部分加滚动条
本机浏览器的滚动行为-它不模拟滚动,仅显示自定义滚动条,仍以本机滚动 跨浏览器和跨平台-无关紧要的地方和方式,滚动条在各处看起来都一样 终极性能-60 FPS(使用RAF)和高度优化的代码 无需额外的样式表-现成的...
网上很多自绘滚动条 但要么是只支持编辑框滚动条的 树形控件的垂直滚动条要特殊处理 因为THUNM POSION消息不响应(貌似是这么个消息 具体名字忘了) 要么是接口功能不够完善 附件中含清晰的demo实例 滚动条类中思路...
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll 前言 前段时间有给大家... 通过简单的标签写法<v-scroll>...</v-scroll> 即可快速生成一个漂亮的替换原生滚动条。 参数配置 props: { // 是否显示原生滚动条
有兴趣刚需的可以自己下载,非常实用的jquery代码,可以完美运行,有能力的还可以二次修改!
WuBin-jsScroll 使用jQuery框架开发,与CSS结合自动化生成个性滚动条,滚动条样式完全通过CSS定义,优化各标签内外高宽差异,有系统滚动条常见的点击、拉拽、滚轮与键盘操作功能。
滚动条分为水平滚动条(Horizontal Scroll Bar)和垂直滚动条(Vertical Scroll Bar)两种。滚动条中有一个滚动块,用于标识滚动条当前滚动的位置。我们可以拖动滚动块,也可以用鼠标点击滚动条某一位置使滚动块移动...
参数1:需要把滚动条插入哪个容器里面(该容器必须是限定宽高有overflow:hidden) 参数2:需要滚动的元素 可选参数: { bgHeight:滚动条父级的高度(在bottom下可以设置这个属性) bgWidth:滚动条父级的宽度(在right下可以...
初学MFC必备,提供Scroll Bar的使用范例。转自PUDN
React删除滚动条 适用于React 15的v1 +版本,适用于React 16.8+的v2 +版本 删除滚动条(通过设置overflow: hidden在主体上),并保留滚动条“间隙”。 读取-它只是使滚动条不可见。 如果滚动条不占用任何空间,则...
),使用ReactJS的自定义滚动动画和滚动速率与本地滚动完全相同查看安装npm i react-custom-scroll --save我为什么需要这个? 所有浏览器上的设计相同滚动条位于内容上方,而不是浮动到侧面-滚动内容上的布局与未...
它支持: 可自定义的滚动条提货,推货轮播Vuescroll的兼容性与Vue.js 2.X相同。演示版您可以在repo的examples文件夹下找到演示。 您可以在网站的“部分查看vuescroll的全部功能。安装npm i vuescroll -S# ORyarn ...
WuBin-jsScroll 使用jQuery开发,与CSS结合自动化生成个性滚动条,滚动条样式完全通过CSS定义,优化各标签内外高宽差异,有系统滚动条常见的点击、拉拽、滚轮与键盘操作功能。
Vue 2滚动条具有自定义滚动条的最简单滚动区域组件。 它基于 。 所有动画,高度和宽度都是纯CSS,因此完全可以自定义和负责任! 是的!。安装您可以像将导入到vue组件文件中,并使用预处理器对其进行处理。 您可以...
recycler-fast-scroll:为recycler view提供了快速滚动和选择索引器
关于在VC++中编程操作滚动条的例子有不少,但由于VC++编程基于消息机制,使得本来很简单的思想变得有些隐讳起来。对于初学者而言,恐怕看到一个例程,并不是很容易就弄清楚其来龙去脉。下面我们结合一个例子,介绍...