如何让android-wheel水平?

时间:2012-03-09 18:13:30

标签: android

我正试图从http://code.google.com/p/android-wheel/取得安卓车轮并使其水平显示。我第一次尝试实现这一目标来自作者本人http://android-devblog.blogspot.com/2010/05/wheel-ui-contol-backgrounds.html在评论部分底部的建议。

kankan:“简单的方法:使用垂直滚轮,但在绘制之前旋转画布。在这种情况下,它还需要更改onTouch并交换x和y触摸坐标以进行滚动。”

我的实现非常简单,我在扩展WheelView并在onDraw方法中将画布旋转90度(我不关心触摸部分,轮子不用于交互)。不幸的是,它只是将数字本身转向侧面,轮窗保持垂直。

有没有人有横向观看轮廓的经验?

3 个答案:

答案 0 :(得分:3)

我设法让水平滚轮显示出来。我不喜欢我使用的方法,但它有效。

我所做的只是在滚轮视图上启动动画。这是我在/ res / anim中放入的带有相关属性的rotate元素。

<rotate android:fromDegrees="-90"
        android:toDegrees="-90"
        android:fillAfter="true" />

正如我所说,我不喜欢实施,但它适用于我需要它。我不知道滚动是如何工作的,因为它在我的程序中被禁用,也不知道是否有任何类型的性能损失以这种方式应用动画。

答案 1 :(得分:1)

您是否也旋转了相应的布局xmls?此代码使用xml设置背景资源和一些drawable。我打赌他们没有轮换。

    private void initResourcesIfNecessary() {
    if (centerDrawable == null) {
        centerDrawable = getContext().getResources().getDrawable(R.drawable.wheel_val);
    }

    if (topShadow == null) {
        topShadow = new GradientDrawable(Orientation.TOP_BOTTOM, SHADOWS_COLORS);
    }

    if (bottomShadow == null) {
        bottomShadow = new GradientDrawable(Orientation.BOTTOM_TOP, SHADOWS_COLORS);
    }

    setBackgroundResource(R.drawable.wheel_bg);
}

答案 2 :(得分:1)

我认为问题非常明确,只能猜测为什么有些受访者感到困惑。您询问如何使http://code.google.com/p/android-wheel/处的垂直轮组件与水平手势和滚动一起表现,如作者所述(并在您的问题中重申)。

我最近在自己的项目中完成了这项工作。

首先,作者的断言只是提供了一个概念框架。在实践中,实现了更多的工作。为了使Horizo​​ntalWheel我扩展了WheelView和WheelScroller并编写了代码,以根据高度覆盖两个类中的所有逻辑。要做到这一点,WheelView和WheelScroller中的一些字段需要getter / setter;以及一些常量和方法需要被访问并设置为受保护或公共而不是私有,因此可以覆盖它们。例如,WheelView没有提供注入WheelScroller或设置自定义ScrollingListener的方法。

最后,在整个定制过程中我一直在努力解决的组件设计存在根本问题。我现在正在努力解决这个问题。该组件从根本上将其包含的视图列表视为具有“当前项”==窗口小部件中间的视图。它根据最接近窗口小部件中心的视图中点测量滚动和对齐。这为小部件提供了从中间到中间的效果。如果存在仅允许一个元素显示的阴影,则捕捉效果很好。但是,偏离该用例,假设您希望阴影之间可以看到多个项目,或者想要一个不同的快照行为,那么您将遇到问题。 Component的view-recycler也不支持多种View类型。

我已经解决了大部分这些问题,很快就会发布。如果有机会我会重建这个组件来调用第一个完全可见的项目== first_item。然后我会废除“当前项目”的概念,因为它只对截图中的用例有意义,并且使得组件的扩展和定制变得更加困难。不可思议的中间,左侧和右侧似乎也是必需的功能,应该是可配置的。