> Java > java지도 시간 > 본문

Android 맞춤 뷰를 사용하여 모양 그래픽 그리기를 구현하는 방법을 알려드립니다.

Y2J
풀어 주다: 2017-04-22 09:54:37
원래의
2770명이 탐색했습니다.

이 글에서는 안드로이드의 사용자 정의 보기를 사용하여 도형 그래픽 그리기를 구현하는 방법을 주로 자세히 소개합니다. 관심 있는 친구는

개요

를 참조하세요. 이전에 Android에서 드로어블의 Shape 리소스 사용을 소개하는 기사를 작성한 적이 있습니다. 드로어블에서 셰이프 리소스를 정의하면 직사각형, 타원, 선, 링 등과 같은 간단한 그래픽 효과를 그릴 수 있습니다. 나중에 프로젝트에서 특정 위치에 수직 점선을 표시하라는 요구 사항이 발생했습니다. 위의 리소스 파일을 자신있게 넣었을 때, 그것이 내 요구 사항을 충족하지 않는다는 것을 발견했습니다. 도형을 사용하여 그린 수직 점선은 실제로는 90도 회전된 수평선입니다. 하지만 이것의 단점은 View의 유효영역이 90도 회전 후 원래 위치와 일치하는 영역이므로 마음대로 변경할 수 없다는 점입니다. 그래서 원하는 결과를 그리기 위해 커스텀 뷰를 활용해볼까 생각했습니다.

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" />
로그인 후 복사

지침: Custom View의 코드에서 onDraw 메소드에서 실행되는 drawLine 메소드의 전체 이름은 다음과 같습니다.

public void drawLine (float startX, float startY, float stopX , float stopY, 페인트 페인트)

startX: 시작 끝점 x 좌표
startY: 시작 끝점 y 좌표
stopX: 끝점 x 좌표
stopY: 끝점 y 좌표

위 4개의 왼쪽 값은 모두 상대 위치, 즉 왼쪽에 컨트롤이 없는 경우 왼쪽 테두리의 상대 위치로 계산됩니다. 휴대폰 화면이 계산됩니다.
canvas.drawLine(0, 0, 100, 0, mPaint); 왼쪽을 기준으로 x 및 y 좌표가 0인 위치에서 시작하여 오른쪽으로 100px 점선을 그리는 것을 의미합니다.

Button 버튼을 제거한 후 그림과 같이 화면의 왼쪽 테두리를 기준으로 상대 위치가 계산되기 시작합니다.

또 다른 주의할 점은 stopX 및 stopY 값이 xml에 있는 컨트롤의layout_width 및layout_height 값을 초과할 수 없다는 것입니다. 그렇지 않으면 가장 작은 값은 기준으로 사용되며, 초과된 길이는 무효가 됩니다.

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의 컨트롤.

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.

아아아아

위 내용은 Android 맞춤 뷰를 사용하여 모양 그래픽 그리기를 구현하는 방법을 알려드립니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿