수색…


소개

페인트는 캔버스 (그리기 호출 유지), 비트 맵 (픽셀 유지) 및 그리기 프리미티브 (사각형, 패스, 비트 맵 ...)와 함께 그리는 데 필요한 네 가지 객체 중 하나입니다.

그림판 만들기

다음 3 가지 생성자 중 하나를 사용하여 새 페인트를 만들 수 있습니다.

  • new Paint() 기본 설정으로 만들기
  • new Paint(int flags) 플래그를 사용해 생성합니다.
  • new Paint(Paint from) 다른 페인트의 설정 복사

성능 문제로 이어질 수 있으므로 일반적으로 페인트 객체 또는 onDraw ()의 다른 객체를 생성하지 않는 것이 좋습니다. (Android Studio에서 경고 할 것입니다.) 대신, 전역으로 만들고 클래스 생성자에서 다음과 같이 초기화하십시오.

public class CustomView extends View {
    
    private Paint paint;
    
    public CustomView(Context context) {
        super(context);
        paint = new Paint();
        //...
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(0xFF000000);
        // ...
    }
}

텍스트 용 그림판 설정

텍스트 그리기 설정

  • setTypeface(Typeface typeface) 설정합니다. 서체 참조
  • setTextSize(int size) 글꼴 크기를 픽셀 단위로 설정합니다.
  • setColor(int color) 텍스트의 색을 포함 해 페인트의 페인트의 setColor(int color) 설정합니다. 또한 setARGB(int a, int r, int g, int bsetAlpha(int alpha)
  • setLetterSpacing(float size) 문자 간의 간격을 em 단위로 설정합니다. 기본값은 0이며, 음의 값은 텍스트를 강화하고 긍정적 인 값은 텍스트를 확장합니다.
  • setTextAlign(Paint.Align align) 원점을 기준으로 텍스트 정렬을 설정합니다. Paint.Align.LEFT 는 원본을 RIGHT 그릴 것이고, RIGHT 는 왼쪽으로 그릴 것이고, CENTER 는 원본을 중심으로 (수평으로) 그릴 것입니다.
  • setTextSkewX(float skewX) 이것은 가짜 기울임 꼴로 간주 될 수 있습니다. SkewX는 텍스트 하단의 수평 오프셋을 나타냅니다. (기울임 꼴은 -0.25를 사용하십시오)
  • setStyle(Paint.Style style) 텍스트 FILL , Stroke 텍스트 STROKE 또는 둘 다 FILL_AND_STROKE

SP 또는 DP에서 픽셀로 변환하려면 TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics()) 을 사용할 수 있습니다.

텍스트 측정

  • float width = paint.measureText(String text) 의 폭을 측정합니다.
  • float height = paint.ascent() 텍스트의 높이를 측정합니다.
  • paint.getTextBounds(String text, int start, int end, Rect bounds 텍스트 크기를 저장합니다. Rect를 할당 paint.getTextBounds(String text, int start, int end, Rect bounds null이 될 수 없습니다.
 String text = "Hello world!";
 Rect bounds = new Rect();
 paint.getTextBounds(text, 0, text.length(), bounds);

측정에는 다른 방법이 있지만,이 세 가지가 대부분의 목적에 부합해야합니다.

셰이프 그리기를위한 그림판 설정

  • setStyle(Paint.Style style) 채워진 모양 FILL , Stroke shape STROKE 또는 둘 다 FILL_AND_STROKE
  • setColor(int color) 페인트의 페인트의 색을 설정합니다. 또한 setARGB(int a, int r, int g, int bsetAlpha(int alpha)
  • setStrokeCap(Paint.Cap cap) 을 설정 라인 모자, 하나 ROUND , SQUARE , 또는 BUTT (없음)을 참조하십시오 .
  • setStrokeJoin(Paint.Join join) 행 결합을 MITER (pointy), ROUND 또는 BEVEL 합니다. 이거 봐.
  • setStrokeMiter(float miter) 마이 타 조인 한도를 설정합니다. 이렇게하면 마이 터 조인이 비 한정적으로 진행되는 것을 방지 할 수 있으므로 x 픽셀 후에 경사 결합으로 바뀝니다. 이거 봐.
  • setStrokeWidth(float width) 스트로크의 폭을 설정합니다. 0 은 캔버스 매트릭스와 독립적 인 헤어 라인 모드로 그립니다. (항상 1 픽셀)

플래그 설정

생성자 또는 setFlags(int flags) 사용하여 다음 플래그를 설정할 수 있습니다.

  • Paint.ANTI_ALIAS_FLAG 에일 리어 Paint.ANTI_ALIAS_FLAG , paint를 부드럽게합니다.
  • Paint.DITHER_FLAG . 색상 정밀도가 기기의 정밀도보다 높으면 이 문제가 발생 합니다.
  • Paint.EMBEDDED_BITMAP_TEXT_FLAG 비트 맵 폰트의 사용을 Paint.EMBEDDED_BITMAP_TEXT_FLAG 합니다.
  • Paint.FAKE_BOLD_TEXT_FLAG 는 굵은 글꼴로 가짜 효과를 적용하여 텍스트를 그릴 수 있습니다. 일부 글꼴은 굵은 글꼴로, 굵은 글꼴은 그렇지 않습니다.
  • Paint.FILTER_BITMAP_FLAG 의 비트 맵의 ​​샘플링에 영향을줍니다.
  • Paint.HINTING_OFF , Paint.HINTING_ON 폰트 힌트를 표시 합니다.
  • Paint.LINEAR_TEXT_FLAG 폰트의 슬캘링을 Paint.LINEAR_TEXT_FLAG 합니다. draw 조작은 대신에 슬캘링됩니다.
  • Paint.SUBPIXEL_TEXT_FLAG 텍스트는 서브 픽셀의 정확도를 사용해 계산됩니다.
  • Paint.STRIKE_THRU_TEXT_FLAG 그려지는 텍스트가 스트라이크됩니다.
  • Paint.UNDERLINE_TEXT_FLAG 그려진 텍스트에 밑줄이 그어집니다.

플래그를 추가하고 다음과 같은 플래그를 제거 할 수 있습니다.

Paint paint = new Paint();
paint.setFlags(paint.getFlags() | Paint.FLAG);   // Add flag
paint.setFlags(paint.getFlags() & ~Paint.FLAG);  // Remove flag

거기에없는 플래그를 제거하려고하거나 이미있는 플래그를 추가해도 아무 것도 변경되지 않습니다. 또한 대부분의 플래그는 set<Flag>(boolean enabled) 사용하여 set<Flag>(boolean enabled) 수 있습니다 set<Flag>(boolean enabled) 예 : setAntialias(true) .

paint.reset() 을 사용하여 페인트를 기본 설정으로 재설정 할 수 있습니다. 유일한 기본 플래그는 EMBEDDED_BITMAP_TEXT_FLAG 입니다. new Paint(0) 를 사용하더라도 설정됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow