質問

私はカスタムを作りました ImageView これは、コールを介した基本的なスクロールをサポートします View.scrollBy()GestureDetector. 。スクロール境界の到達に関するフィードバックを追加したかったので、次のようにフェードすることを可能にしました。

setVerticalFadingEdgeEnabled(true);
setHorizontalFadingEdgeEnabled(true);

しかし、フェードは上部と左のエッジでのみ予想していたように機能しますが、下と右のエッジはフェードしません。ビューの高さと幅がfill_parentに設定されているため、これらのエッジが画面外にないと確信しています。何が悪いの?


編集:垂直/水平フェードエッジのみを有効にすると、上/左のエッジのみが描画されることが確認されます。今、私は読もうとしています view.java(6870 an)...

役に立ちましたか?

解決

問題があるようです getBottomFadingEdgeStrength()getRightFadingEdgeStrength(), 、あるいは、私は彼らを私のカスタムビューで作業するようにそれらを無効にしなかったという事実で。

これらの保護された方法は、ビューを示しています draw() いつフェードを描く(そしてどれほど強く - 何が見えるか ScrollView スクロール制限に近づいたら実行します)。

上部と左のエッジの場合、制限は簡単です 0 どちらの場合も、デフォルトの実装は(オン/オフ方法で)機能しますが、他の2つでは、自分のスクロール境界(私の場合は描画可能な寸法)を考慮に入れるには、メソッドをオーバーライドする必要があります。

他のヒント

これは古いことを知っていますが、オーバーライド方法と比較して簡単に回避することは、XMLで勾配と相対的なレイアウトを使用することです。以下に抽象化されたバージョンを見つけてください。コピーして貼り付けることはできませんが、メッセージを中継する必要があります。申し訳ありませんが、すべて手で入力しました。

<!-- object with fading edges in layout -->
<RelativeLayout>
    <ImageView>
    <LinearLayout background="gradient_left" layout_alignParentStart="true">
    <LinearLayout background="gradient_right" layout_alignParentEnd="true">
</RelativeLayout>


<!-- gradient left xml in drawable-->
<shape>
    <gradient startColor="#000" endColor:"@android:color/transparent" angle="0"
</shape>


<!-- gradient right xml in drawable -->
<shape>
   <gradient startColor="#000" endColor:"@android:color/transparent" angle="180"
</shape>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top