Android 사용자 정의 View shape 그래 픽 구현

3949 단어 AndroidViewshape
개술
이전에 쓴 글 은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);
  }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기