android 사용자 정의 View Path 다각형, 베셀 곡선 만들기
8563 단어 Android
1. 다중 변형을 그리는 데 있어서 Path는 매우 중요하다. Path는 지정된 점을 연결하여 다중 변형을 그리는 목적을 실현할 수 있다.원형 경로와 호도 경로, 직사각형 경로를 추가할 수 있으며, 마지막으로 canvas를 호출합니다.drawPath 경로를 그려주시면 됩니다.
2. 경로에 텍스트를 추가하려면 canvas를 호출해야 합니다.drawTextOnPath() 방법, 첫 번째 파라미터는 텍스트 내용, 두 번째 파라미터는 경로, 세 번째 파라미터는 텍스트를 추가하는 시작 위치와 경로의 거리, 네 번째 파라미터는 경로의 위쪽과 아래쪽, 다섯 번째 파라미터는 Paint
3. 베셀 곡선을 그릴 때 두 가지 방법이 있는데 하나는 Path이다.quadTo () 방법은 네 가지 파라미터가 있는데 앞의 두 파라미터는 참고점을 설정하고 뒤의 두 파라미터는 종점을 설정하며 이 방법을 사용하기 전에 시작점(Path.moveTo () 방법으로 시작점을 설정해야 한다.
4. 베셀 곡선을 그리는 또 다른 방법은 Path.rQuadTo () 방법, 이 방법은 현재 점 (현재 점이 어느 위치에 있든지) 을 원점으로 한 좌표계를 다시 구축하여 베셀 곡선을 그리는 것입니다. 앞의 두 파라미터는 참고점을 설정하고, 뒤의 두 파라미터는 끝점을 설정합니다.마찬가지로 이 방법을 사용하기 전에 시작점을 설정해야 한다'
코드 구현
public class Angle extends View {
private int width;
private int heigth;
private Paint mPaintNormal;
private Paint mPaintPoint;
private Path mPathRect;
private Path mPathCircle;
private Path mPathBser;
private Path mPathBserLang;
public static final int REFRESH=0x55;
private int count=0;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case REFRESH:
count+=5;//count
if (count>100) {
count = 0;
}
handler.sendEmptyMessageDelayed(REFRESH,50);
invalidate();
break;
}
}
};
public Angle(Context context) {
super(context);
}
public Angle(Context context, AttributeSet attrs) {
super(context, attrs);
mPaintNormal=new Paint();
mPaintNormal.setColor(Color.BLACK);
mPaintNormal.setStyle(Paint.Style.STROKE);
mPaintNormal.setAntiAlias(true);
mPaintNormal.setTextSize(20);
mPaintPoint=new Paint();
mPaintPoint.setColor(Color.BLUE);
mPaintPoint.setAntiAlias(true);
mPaintPoint.setStyle(Paint.Style.STROKE);
mPaintPoint.setStrokeWidth(8);
mPathRect=new Path();
mPathCircle=new Path();
mPathBser=new Path();
mPathBserLang=new Path();
handler.sendEmptyMessage(REFRESH);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width=getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
heigth=getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
setMeasuredDimension(width,heigth);
Log.d("length"," "+width);
Log.d("length"," "+heigth);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//
mPathRect.moveTo(200,0);//
mPathRect.lineTo(0,200);// ( )
mPathRect.lineTo(300,200);//
mPathRect.close();// mPath.lineTo(200,200);//
canvas.drawPath(mPathRect,mPaintNormal);//
//
mPathCircle.addCircle(500,120,100, Path.Direction.CCW);//
canvas.drawPath(mPathCircle,mPaintNormal);
canvas.drawTextOnPath(" ",mPathCircle,0,0,mPaintNormal);//
//
mPathBser.moveTo(100,350);//
mPathBser.quadTo(400,100,500,300);// ,
canvas.drawPath(mPathBser,mPaintNormal);
canvas.drawPoint(100,400,mPaintPoint);//
canvas.drawPoint(400,100,mPaintPoint);
canvas.drawPoint(500,300,mPaintPoint);
//
mPathBserLang.reset();
mPathBserLang.moveTo(count,500);
//
for (int i=0;i<10;i++) {
//
mPathBserLang.rQuadTo(20, 6, 50, 0);//rquadTo ( count,500 )
mPathBserLang.rQuadTo(20, -6, 50, 0);// , rQuadTo ( )
}
canvas.drawPath(mPathBserLang,mPaintNormal);
canvas.drawCircle(360,500,60,mPaintPoint);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.