Android 사용자 정의 View 신축성 작은 공 효과 구현
사용자 정의 코드 예제
public class BezierView extends View {
Paint paint;//
Path path;//
int radius = 50;//
int time = 100;//
int index;
int offsetIndex;
float viewX, viewY;//
float width;//
float partWidth;// 1/4
int paddingLeft, paddingRight;//
float x1, y1, x2, y2, x3, y3, x4, y4;//
float x12, y12, x23, y23, x34, y34, x41, y41;//
public BezierView(Context context) {
this(context, null);
}
public BezierView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public BezierView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint = new Paint();
paint.setColor(ResourcesCompat.getColor(getResources(), R.color.colorPrimary, null));
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
paddingLeft = getPaddingLeft();
paddingRight = getPaddingRight();
width = getWidth() - paddingLeft - paddingRight;
partWidth = width / 4;
path = new Path();
path.moveTo(x1, y1);
path.cubicTo(x1, y1, x12, y12, x2, y2);
path.cubicTo(x2, y2, x23, y23, x3, y3);
path.cubicTo(x3, y3, x34, y34, x4, y4);
path.cubicTo(x4, y4, x41, y41, x1, y1);
canvas.drawPath(path, paint);
move();
}
public void move() {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if (index < time - 1) {
index++;
viewX = width / time * index + paddingLeft;
viewY = 400;
x1 = viewX - radius;
x2 = viewX;
x3 = viewX + radius;
x4 = viewX;
y1 = viewY;
y2 = viewY - radius;
y3 = viewY;
y4 = viewY + radius;
offsetIndex = index % (time / 4) + 1;
//
float position = (viewX - paddingLeft) / partWidth;
//
if (position >= 0 && position < 1) {
x3 = viewX + radius + radius / (time / 4) * offsetIndex;
} else if (position >= 1 && position < 2) {
x3 = viewX + radius + radius;
} else if (position >= 2 && position < 3) {
x3 = viewX + radius + radius - radius / (time / 4) * offsetIndex;
} else {
x3 = viewX + radius;
}
x23 = x34 = x3;
y12 = y23 = y2;
//
if (position >= 1 && position < 2) {
x1 = viewX - radius - radius / (time / 4) * offsetIndex;
} else if (position >= 2 && position < 3) {
x1 = viewX - radius - radius;
} else if (position >= 3) {
x1 = viewX - radius - radius + radius / (time / 4) * offsetIndex;
} else {
x1 = viewX - radius;
}
x12 = x41 = x1;
y34 = y41 = y4;
postInvalidate();
} else {
cancel();
}
}
}, 0, 5000);
}
}
총결산이상 은 안 드 로 이 드 사용자 정의 뷰 가 탄력 적 인 작은 공 효 과 를 실현 하 는 모든 내용 입 니 다.안 드 로 이 드 를 개발 하 는 데 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.우리 에 대한 여러분 의 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.