Android 사용자 정의 View shape 그래 픽 구현
이전에 쓴 글 은Android 에서 drawable 은 Shape 자원 을 사용 합 니 다.drawable 의 shape 자원 을 정의 함으로써 간단 한 도형 효 과 를 그 릴 수 있다.예 를 들 어 사각형,타원형,선형 과 링 등 이다.나중에 나 는 프로젝트 에서 이런 수 요 를 만 나 특정한 위치 에 수직 적 인 점선 을 표시 해 야 했다.내 가 마음속 에 위 에 있 는 자원 서 류 를 넣 었 을 때,나 는 그것 이 결코 나의 요구 에 부합 되 지 않 는 다 는 것 을 알 게 되 었 다.shape 를 사용 하여 그 려 진 수직 점선 은 사실은 수평 선 을 90 도 회전 시 키 는 것 이다.그러나 이 뷰 유효 구역 은 90 도 회전 후 원래 위치 와 겹 치 는 구역 이 므 로 임의로 변경 할 수 없 으 며,이러한 효 과 는 전혀 사용 할 수 없다 는 단점 이 있다.그래서 나 는 내 가 원 하 는 결 과 를 사용자 정의 view 로 그 릴 생각 이 었 다.
1.수평 점선 을 그린다
코드 는 다음 과 같다.
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class CustView extends View{
private Paint mPaint; //
public CustView(Context context, AttributeSet attrs) {
super(context, attrs);
//
initPaint();
setLayerType(View.LAYER_TYPE_SOFTWARE, mPaint); //4.0 ,
}
private void initPaint() {
mPaint = new Paint();
mPaint.setAntiAlias(true); //
mPaint.setStyle(Paint.Style.STROKE); //
mPaint.setStrokeWidth(3); //
mPaint.setColor(Color.RED); //
mPaint.setPathEffect(new DashPathEffect(new float[]{5,5,5,5}, 1)); //
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(0, 0, 100, 0, mPaint);
}
}
레이아웃 파일 참조:
<com.test.CustView
android:layout_width="100dp"
android:layout_height="10dp"
android:layout_marginTop="10dp" />
설명:사용자 정의 View 코드 에서 onDraw 방법 에서 실 행 된 drawLine 방법 은 전체 이름 이 다음 과 같 습 니 다.public void drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
startX:시작 점 x 좌표
startY:시작 점 y 좌표
stopX:종료 점 x 좌표
stopY:끝 점 y 좌표
위의 네 개의 왼쪽 값 은 모두 상대 적 인 위치 로 계산 합 니 다.즉,왼쪽 컨트롤 과 상대 적 인 위 치 를 계산 합 니 다.왼쪽 에 컨트롤 이 없 으 면 핸드폰 화면 왼쪽 테두리 의 상대 적 인 위 치 를 계산 합 니 다.
canvas.drawLine(0, 0, 100, 0, mPaint);상대 적 으로 왼쪽 이 x 이 고 y 좌표 가 0 인 위치 에서 시작 하여 오른쪽으로 100 px 의 점선 을 그 리 는 것 을 나타 낸다.
Button 단 추 를 제거 한 후 상대 위 치 는 화면 왼쪽 테두리 로 계산 합 니 다.그림 과 같 습 니 다.
그리고 주의해 야 할 것 은 stopX 와 stopY 의 값 은 이 컨트롤 이 xml 에 있 는 layot 를 초과 할 수 없습니다.width 와 layotheight 의 값 입 니 다.그렇지 않 으 면 값 이 가장 작은 것 을 기준 으로 초과 한 길이 가 잘못 되 었 습 니 다.
2.수직 점선 을 그린다
위의 코드 와 일치 합 니 다.아래 부분 으로 만 수정 하 십시오.
canvas.drawLine(0, 0, 0, 100, mPaint);
3.옹 골 진 원 을 그린다
1).먼저 붓 모양 을 채 워 줍 니 다.
mPaint.setStyle(Paint.Style.FILL); //채 울 펜 스타일 설정
2).캔버스 에 원 을 그린다
canvas.drawCircle(50, 50, 50, mPaint);
같은 X 와 Y 의 값 은 이 컨트롤 이 xml 에 있 는 layot 를 초과 할 수 없습니다.width 와 layotheight 의 값.
4.원 고 리 를 그린다
마찬가지 로 코드 를 조금 만 수정 하면 됩 니 다.
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(50, 50, 50, mPaint); //
mPaint.setColor(Color.WHITE); //
canvas.drawCircle(50, 50, 30, mPaint); //
}
5.사각형 그리 기
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
RectF rect = new RectF(0, 0, 80, 60);
canvas.drawRect(rect, mPaint);
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.