2011-01-17 4 views
3

GestureDetector에서 View.scrollBy()을 호출하여 기본 스크롤을 지원하는 사용자 지정 ImageView을 만들었습니다.페이딩 가장자리가 위쪽과 왼쪽에서만 작동

setVerticalFadingEdgeEnabled(true); 
setHorizontalFadingEdgeEnabled(true); 

하지만 난 단지 위쪽 및 왼쪽 가장자리에서 예상대로 하단과 오른쪽 사람이 퇴색하지 않는 동안, 작품 페이딩 : 나는 페이딩 활성화 그래서 경계를 스크롤의 도달에 대한 몇 가지 피드백을 추가하고 싶었다. 보기가 높이와 너비의 fill_parent로 설정되어 있으므로 가장자리가 화면에서 벗어나지 않았을 것으로 확신합니다. 무슨 일 이니?


편집 : 수직/수평 페이딩 가장자리 만 활성화하면 위쪽/왼쪽 가장자리 만 그려지는 것을 확인할 수 있습니다. 지금은 View.java (6870 an on)을 읽으려고합니다 ...

답변

3

문제가 getBottomFadingEdgeStrength()getRightFadingEdgeStrength() 이상인 것으로 보입니다. 사용자 정의보기에서 작동하도록 무시하지 않은 것 같습니다.

이러한 보호 된 방법은보기의 draw()에게 언제 색조를 그릴 것인지 (그리고 얼마나 강하게 - 스크롤 한도에 가까워 졌을 때 ScrollView의 효과가 있는지 확인) 알려줍니다.

양쪽 모두 한계가 0이고 기본 구현이 (켜기/끄기 방식으로) 작동하기 때문에 상단 가장자리와 좌측 가장자리가 쉽습니다. 그러나 다른 두 가지 경우에는 자체 메서드를 재정의해야합니다. 스크롤 바운드 (내 경우 drawable 차원).

0

오래된 방법이지만, 우선적 인 방법과 비교할 때 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>