Android自定义WheelView的40行关键代码

// 给ListView设置一个滑动监听器,就可以把它变成WheelView
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
    /* 实现代码如下所示 */
});
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
    // 当滑动停止时
    if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
        View firstVisibleView = view.getChildAt(0);
        int height = firstVisibleView.getHeight();
        /**
         * top为firstVisibleView与parent两者顶部的相对距离,单位为像素。
         * Android的坐标轴原点在屏幕左上角,越往上y值越小。
         * 由于firstVisibleView总是有部分不可见,
         * 因此top的取值范围为:(-height, 0]
         */
        int top = firstVisibleView.getTop();
        int visibleHeight = top + height;
        if(visibleHeight <= (height >> 1)) {
            // 若firstVisibleView可见高度小于等于一半,则上滑直至不可见
            view.scrollBy(0, visibleHeight + ((ListView)view).getDividerHeight());
        } else {
            // 若firstVisibleView可见高度大于一半,则下滑直至完全可见
            view.scrollListBy(0, top);
        }
        // 调用scrollBy()之后,会引发onScroll()
    }
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    int newMiddlePosition = firstVisibleItem + ((visibleItemCount - 1) >> 1);
    if (mMiddlePosition != newMiddlePosition) {
        mMiddlePosition = newMiddlePosition;
        BaseAdapter adapter = ((BaseAdapter)view.getAdapter());
        adapter.notifyDataSetChanged();
        // 接着可以调用监听mMiddlePosition变化的自定义listener
    }
}
时间: 2024-10-14 14:59:34

Android自定义WheelView的40行关键代码的相关文章

Android中弹出对话框,AlertDialog关键代码

写在这里便于以后查看. Android中弹出对话框的关键代码: 1 btn01.setOnClickListener(new OnClickListener() { 2 3 @Override 4 public void onClick(View v) { 5 Toast.makeText(musicActivity.this, "tanchu", 100).show(); 6 //以下是弹出对话框的关键代码, 7 AlertDialog.Builder b = new AlertDi

Android 自定义View实现多行RadioGroup (MultiLineRadioGroup)

一.项目概况 我们都知道RadioGroup可以实现选择框,但它有一个局限性,由于它是继承自LinearLayout的,所以只能有一个方向,横向或者纵向:但有时候仅一行的RadioGroup并不能满足实际的需求,比如在一行的宽度下显示不完所有的选项,设计上又不允许左右滑动,这时候RadioGroup就不能满足这样的功能设计了:基于此,我写了这个MultiLineRadioGroup并且开源出来: 1.程序界面效果图   2.功能接口 在Api开发上,能够用到的功能及我能想到的,基本都已经添加完毕

40行python代码写一个桌面翻译器

大多数有抱负的数据科学家是通过学习为开发人员开设的编程课程开始认识 python 的,他们也开始解决类似 leetcode 网站上的 python 编程难题.他们认为在开始使用 python 分析数据之前,必须熟悉编程概念. 资深数据分析师 Manu Jeevan 认为,这是一个巨大的错误,因为数据科学家使用 python 来对数据进行检索.清洗.可视化和构建模型,而不是开发软件应用程序.实际上,为了完成这些任务,你必须将大部分时间集中在学习 python 中的模块和库上. 请按照下面这个步骤来

Android自定义view学习笔记02

Android自定义view学习笔记02 本文代码来自于张鸿洋老师的博客之Android 自定义View (二) 进阶 学习笔记,对代码进行些许修改,并补充一些在coding过程中遇到的问题.学习的新东西. 相关代码 //CustomImageView.java package mmrx.com.myuserdefinedview.textview; import android.content.Context; import android.content.res.TypedArray; im

Android基于wheelView的自定义日期选择器(可拓展样式)

基于wheelView的自定义日期选择器 项目要求效果图: 要求 "6月20 星期五" 这一项作为一个整体可以滑动,"7时"."48分"分别作为一个滑动整体. 系统自带的DatePicker.TimePicker大家都知道,只有这种效果: 百度了很多,试了NumberPicker等都不行,本来打算自己写.网友推荐了一个开源组件WheelView,下下来试了试,发现他已经定义的很完善了,在他的基础上拓展很容易. 现将基于wheelView自定义日期

【转】Android自定义Adapter的ListView的思路及代码

原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下 在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快捷方式.例如ArrayAdapter.SimpleAdapter和SimpleCursorAdapter等.但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位.假设一行里面有一个按钮

Android 自定义圆圈进度并显示百分比例控件(纯代码实现)

首先,感谢公司能给我闲暇的时间,来稳固我的技术,让我不断的去探索研究,在此不胜感激. 先不说实现功能,上图看看效果 这个是续上一次水平变色进度条的有一个全新的控件,理论实现原理 1.分析控件:该控件基本上是圆圈内嵌圆圈: 2.进度计算:其实是小学二年级数学题:当前进度/总数=百分比: 3.中间时间:呵呵,纯粹忽悠,不解释(当前时间). 理论总是和实践差距的太远,不扯淡,不吹嘘,贴代码: package com.spring.progressview; import java.text.Simpl

Android自定义View【实战教程】5??---Canvas详解及代码绘制安卓机器人

友情链接: Canvas API Android自定义View[实战教程]3??--Paint类.Path类以及PathEffect类详解 神马是Canvas 基本概念 Canvas:可以理解为是一个为我们提供了各种工具的画布,我们可以在上面尽情的绘制(旋转,平移,缩放等等).可以理解为系统分配给我们一个一个内存空间,然后提供了一些对这个内存空间操作的方法(API), 实际存储是在下面的bitmap. 两种画布 这里canvas可以绘制两种类型的画图,分别是view和surfaceView. V

自定义EL表达式,将对象转成json格式,关键代码

做javaweb开发的最常用的一个东西el表达式,这个东西是个很好用的东西,但有些时候我们处理复杂的字符串操作,就有些相形见绌了,这个时候就需要用自定义的方法去实现更多简洁方便的事情. 下面自定义一个将对象转成json字符串的自定义el表达式用来讲解这个自定义的过程: ElFunctions.java import net.sf.json.JSONObject; public class ElFunctions{ public static String toJsonString(Object