2012-03-09 17 views
2

私は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°キャンバスを回転させる場合

私の実装は非常に単純である(Iタッチ部分に関係していないよ、ホイールは、相互作用のためではありません)。残念なことに、それは彼ら自身の側で数字を回すことです、ホイールウィンドウは垂直にとどまります。

ホイールビューを水平化した経験がある人はいますか?

答えて

1

質問はかなり明確で、なぜ一部の回答者が混乱しているのかしかわかりません。あなたは、http://code.google.com/p/android-wheel/のVertical Wheelコンポーネントを、水平のジェスチャーとスクロールで動作させる方法を尋ねました。

私は最近自分のプロジェクトでこれを行っています。すべての

まず、著者の主張概念的枠組みを提供します。実際には、実現するためにはるかに多くの作業が必要です。 Horizo​​ntalWheelを作成するには、WheelViewとWheelScrollerを拡張し、高さに基づいて両方のクラスのすべてのロジックをオーバーライドするコードを書きました。これを行うために、WheelViewとWheelScrollerのいくつかのフィールドにはゲッター/セッターが必要でした。プライベートではなく保護されたものとして公開されるようにする必要がある定数やメソッドもあります。したがって、オーバーライドすることができます。たとえば、WheelViewはWheelScrollerを挿入する方法やカスタムScrollingListenerを設定する方法を提供しません。

最後に、私はカスタマイズ全体で苦労してきた部品の設計における根本的な問題があります。私は今問題に苦しんでいます。コンポーネントは基本的に、それが含まれているビューのリストを、「現在のアイテム」==ウィジェットの中央にあるビューとして扱います。これは、ウィジェットの中心に最も近いビューの中点に基づいて、スクロールと位置揃えを測定します。これにより、ウィジェットにスナップツーミドル効果が与えられます。 1つの要素だけが表示されるような影がある場合、スナップ効果は素晴らしいです。しかし、そのユースケースから逸脱して、シャドウ間に複数のアイテムが表示されたり、異なるスナップ動作が必要な場合は、問題が発生します。コンポーネントのビューリサイクラは複数のビュータイプもサポートしていません。

私はこれらの事柄のほとんどを修正し、すぐに公開します。私はこのコンポーネントを再構築して最初の完全に表示可能なアイテム== first_itemを呼び出すことができました。それから、スクリーンショットのユースケースにしか意味をなさないので、「現在のアイテム」の概念を取り除き、コンポーネントを不必要に拡張してカスタマイズすることを難しくしています。途切れることなく、中間、左、右にスナップすることも必要な機能のように思えます。設定が必要です。

1

適切なレイアウトxmlもローテーションしましたか?このコードはバックグラウンドのResourcesと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); 
} 
+0

お返事ありがとうございます。私はあなたが「レイアウトxmlを回転させる」ことによって何を意味するのかを正確に理解することができません。これは、initResourcesIfNecessary()をオーバーライドすることによって、あるいは水平ホイールが定義されているxmlに何らかの形でプログラムで実行されますか? – Matt

+0

ええと、もう一度見てみると、実際には画像がロードされています。私はその前回のことを忘れていたとは思わない。バックグラウンドリソースがキャンバスで回転しない可能性がありますか?イメージエディタでイメージを回転するだけですか? – BoredAndroidDeveloper

+0

申し訳ありませんが、私を失った。イメージはどこにありますか?私はwheelviewプロジェクト内の画像に気付かなかった。 – Matt

3

私は水平ホイールを表示することができました。私が使った方法は嫌いですが、うまくいきます。

私はホイールビューでアニメーションを開始します。関連する属性を持つ/ res/animに入れた回転要素を次に示します。

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

私が言ったように、私は実装が嫌いですが、それは私が必要なもののために働いた。私のプログラムではスクロールがどのように機能しているのか分かりませんし、このような方法でアニメーションを適用した場合、どんな種類のパフォーマンス・ヒットがあるか分かりません。

+0

私は以前のコメントで間違ったプロジェクトを引っ張った、申し訳ありません!私の元の答えによると、res/drawable/wheel_bg.xmlはバックグラウンドリソースなので回転していないようです。うれしいことですが、アニメーションルートのパフォーマンスに問題がある場合は、rotation xmlフラグをwheel_bg.xmlファイルに追加できます。 (私はまた、ビューを回転させるだけでアニメーションを開始するとパフォーマンスに影響を与えるかどうかわかりません。ヒットが表示されない場合はそのままにしてください) – BoredAndroidDeveloper

関連する問題