必威体育Betway必威体育官网
当前位置:首页 > IT技术

【Android 业务开发】看似炫酷的功能其实没那么难实现。。如何将HorizontalScrollView选中的item永远保持在屏幕中间呢?

时间:2019-10-12 13:12:17来源:IT技术作者:seo实验室小编阅读:54次「手机版」
 

horizontalscrollview

这段时间已经在连续两个项目中被产品经理要求实现这样一个需求,就是**选中的horizontalscrollview中的item要永远展示在屏幕中间位置**。 ###先看下效果图 ###吐槽 在第一次接到这个需求时,我的思路其实很混乱,写了一堆计算代码,再加上大量自测才完成了这个需求。可是在完成这个需求后,我是没法清楚地表达出自己的实现的,也就是我写的这段代码其实对我个人成长来说是无意义的,我也没有想到自己会再碰到这样的需求。 直到在最近一次的需求评审上产品经理居然真的就又提出了这个需求,我的第一反应是这个需求是不能接的,这个开发需要大量的时间。可是同组iOS开发却质疑:“这个需求我们之前不是实现过吗?方法拿过来用就行了呀”。我当时觉得非常不好意思,我真的不好意思说我写的代码没法复用。。 于是,痛定思痛,我在思路清晰的时候好好想了下这个需求的实现,其实还是非常简单的! ###代码实现 我们不是要把选中的item永远保持在horizontalScrollview中间吗?那只要在选中了item之后,scrollTo到屏幕中间就行了呀。 ``` fun onClicked(index: Int) { if (index == -1) { return } this.post({ val position = index val itemView = linear.getChildAt(position) val itemWidth = itemView.width val screenWidth = CommonUtil.getScreenWidth(context) val newPosition = itemView.left - (screenWidth / 2 - itemWidth / 2) val scrollBy = newPosition - lastPosition lastPosition = newPosition smoothScrollBy(scrollBy, 0) }) } ``` 这里封装了一个自定义的HorizontalScrollView,只需要addView到这个自定义的HorizontalScrollView就可以了,并不需要像之前那样add到HorizontalScrollView的Linearlayout中。来看下完整代码: ``` class CenterShowHorizontalScrollView(context: Context, attrs: AttributeSet) : HorizontalScrollView(context, attrs) { val linear: LinearLayout var lastPosition = 0
init {
    linear = LinearLayout(context)
    linear.orientation = LinearLayout.HORIZONTAL
    val params = LinearLayout.layoutparams(
            FrameLayout.LayoutParams.wrap_content, FrameLayout.LayoutParams.MATCH_parent)
    params.leftMargin = CommonUtil.dp2px(context, 15f)
    linear.gravity = Gravity.CENTER_VERTICAL

    this.addView(linear, params)
}

fun onClicked(index: Int) {
    if (index == -1) {
        return
    }
    this.post({
        val position = index
        val itemView = linear.getChildAt(position)
        val itemWidth = itemView.width
        val screenWidth = CommonUtil.getScreenWidth(context)
        val newPosition = itemView.left - (screenWidth / 2 - itemWidth / 2)
        val scrollBy = newPosition - lastPosition
        lastPosition = newPosition
        smoothScrollBy(scrollBy, 0)
    })
}

fun removeAllItemViews() {
    linear.removeAllViews()
}

fun addItemView(itemView: View, params: LinearLayout.LayoutParams) {
    linear.addView(itemView, params)
}

}

在xml中这样引用:

<ctrip.Android.tour.pricecalendar.component.CenterShowHorizontalScrollView

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:id="@+id/multiline_layout"

android:background="#ffffff"

android:scrollbars=“none”>

</ctrip.android.tour.priceCalendar.component.CenterShowHorizontalScrollView>

java文件中注意在addView到这个自定义的HorizontalScrollView中时,要调用addItemView方法。然后在选中item时,调用onClicked方法。

相关阅读

常见电脑屏幕分辨率

1024*600 (常见8.9寸电脑使用) 1024*768(常用10.4、12.1、14.1、15寸电脑使用)4:3 1280*1024(常用14.1、15寸电脑使用)5:4 1600 * 900

MIGO的屏幕增强

最近在群里看到小伙伴谈到migo的收货的增强,如图所示: 如何做到呢,首先我们做下准备工作: 1.我们需要创建2个表分别作为抬头和行项目

js控制屏幕双屏显示

一、需求 双屏显示器下,在主屏(副屏)显示的web页面中,点击链接,打开新页面在副屏(主屏)上显示。 二、实现方式 代码实现: testdouble.html

系统电脑频繁假死(突然屏幕卡死,任何操作无法执行)

1、按Win+R打开运行窗口,并输入regedit点击确定,打开注册表编辑器; 2、在注册表左侧依次打开:HKEY_Local_Machine\SYSTEM\Current

PPS播放器任意设置播放屏幕画面大小比例的诀窍

在PPS播放器中,其实用户是可以任意的设置播放屏幕的大小的。但是前提是我们要放弃调用WMP播放,而是采用PPS新版中自带的播放器进行

分享到:

栏目导航

推荐阅读

热门阅读