Android 는 간단 한 드 롭 다운 댐퍼 효과 예제 코드 를 실현 합 니 다.
다음은 사용자 정의 컨트롤 의 코드 부분 입 니 다.
public class MyView extends ScrollView {
//
int initY;
//
int deltaY;
int touchY;
// item
Rect topRect;
// item
View inner;
// ImageView
int initTop,initButtom;
int left = 0,top = 0,right = 0,bottom = 0;
ImageView imageView;
State state;
boolean recordFlag;
enum State
{
UP,NORMAL,DOWN
}
boolean isMoving;
boolean shutScroll;
private int current_Bottom;
private int current_Top;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
state = State.NORMAL;
topRect=new Rect();
recordFlag=false;
}
public void setImageView(ImageView imageView)
{
this.imageView=imageView;
}
//
@Override
protected void onFinishInflate() {
super.onFinishInflate();
// item, item,
inner=getChildAt(0);
Log.i("inner", inner.toString());
}
//onTouchEvent true , false
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(inner!=null)
{
commOnTouchEvent(ev);
}
if(shutScroll)
{
return true;
}else
{
return super.onTouchEvent(ev);
}
}
private void commOnTouchEvent(MotionEvent ev) {
switch(ev.getAction())
{
case MotionEvent.ACTION_DOWN:
{
if(recordFlag==false)
{
left=inner.getLeft();
top=inner.getTop();
right=inner.getRight();
bottom=inner.getBottom();
recordFlag=true;
}
//
initY=(int) ev.getY();
// ImageView
initTop=imageView.getTop();
// ImageView
initButtom=imageView.getBottom();
break;
}
case MotionEvent.ACTION_MOVE:
{
//
deltaY=(int) (ev.getY()-initY);
if(deltaY<0)
{
//
state=State.UP;
isMoving=false;
shutScroll=false;
}
else if(deltaY>=0)
{
// , getScrollY 0 , down 。
if(getScrollY()==0)
{
//
state=State.DOWN;
isMoving=true;
shutScroll=true;
}
}
if(isMoving)
{
if (topRect.isEmpty()) {
//
topRect.set(left, top,right,bottom);
}
float inner_move_H = deltaY / 5;
inner.layout(topRect.left, (int) (topRect.top + inner_move_H),
topRect.right, (int) (topRect.bottom + inner_move_H));
float image_move_H = deltaY / 10;
current_Top = (int) (initTop + image_move_H);
current_Bottom = (int) (initButtom + image_move_H);
imageView.layout(imageView.getLeft(), current_Top,
imageView.getRight(), current_Bottom);
}
break;
}
case MotionEvent.ACTION_UP:
{
if(needToScroll())
{
animation();
}
if(getScrollY()==0)
{
/* ? :
* getScrollY() view Y 。
* , , View ,View up,normal;
* down 。 View ,normal down , view
* 。 down 。*/
state=State.NORMAL;
}
break;
}
}
}
private void animation() {
//
TranslateAnimation image_Anim = new TranslateAnimation(0, 0,
Math.abs(initTop - current_Top), 0);
image_Anim.setDuration(200);
imageView.startAnimation(image_Anim);
imageView.layout(imageView.getLeft(), (int) initTop,
imageView.getRight(), (int) initButtom);
//
TranslateAnimation inner_Anim = new TranslateAnimation(0, 0,
inner.getTop(), topRect.top);
inner_Anim.setDuration(200);
inner.startAnimation(inner_Anim);
inner.layout(topRect.left, topRect.top, topRect.right, topRect.bottom);
//state=State.NORMAL;
topRect.setEmpty();
}
private boolean needToScroll() {
if(state==State.DOWN)
{
return true;
}
return false;
}
}
이상 의 안 드 로 이 드 가 간단 한 드 롭 다운 댐퍼 효 과 를 실현 하 는 예제 코드 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.