フェージングエッジは、上部と左でのみ動作します
-
12-10-2019 - |
質問
私はカスタムを作りました 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>