캔버스에 텍스트를 그려야합니다. 캔바스에 직사각형 상자를 이미 추가했습니다.이 텍스트를 상자 안에 넣는 것이 목표이지만, 시도해도 텍스트는 모든 화면 크기에 완벽하게 맞지 않습니다.캔버스에 사용자 정의 크기 텍스트 그리기
다른 하나는이 텍스트가 간단한 HTML이라는 것입니다.
TextView currDateLabel = new TextView(getContext());
currDateLabel.layout(0, 0, boxSize.x, boxSize.y);
currDateLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.label_date));
currDateLabel.setTextColor(Color.WHITE);
currDateLabel.setText(Html.fromHtml("Dec 11<sup><small><small>TH</small></small></sup>"));
currDateLabel.setDrawingCacheEnabled(true);
Bitmap dateBitmap = currDateLabel.getDrawingCache(true);
// I've also tried setting the width of this Bitmap but it doesn't seem to do anything
this.canvas.drawBitmap(dateBitmap, boxPosition.x, boxPosition.y, null);
그래서 여기에 일부 변수를 설명합니다 :
boxSize
이 상자에 캔버스의Point
저장 폭 것을 객체와 높이입니다. 이 값은 상자 밖으로 나가는 텍스트를 볼 수 있기 때문에TextView
의 크기에는 아무런 영향을주지 않습니다.boxPosition
캔버스에 상자x
y
과 위치를 저장하는Point
목적이다.R.dimen.label_date
은dimens.xml
의 값입니다.
여러 개의 (등등 values/dimens.xml
, values-hdpi/dimens.xml
, values-xhdpi/dimens.xml
등) dimens.xml
파일 나는 화면 크기의 대부분을 테스트하고 각 화면의 범주에 대한 텍스트의 크기를 알아낼 수 생각
만든 . 그러나 그것은 내가 예상했던대로 작동하지 않습니다.
화면 폭 :
이 값은 삼성 갤럭시 S8위한 1440, 화면 높이 : 2768
화면 밀도 : 4.0
화면 밀도 DPI : 640
화면 스케일 밀도 : 4.0
이 값은 입니다. Samsung Galaxy S7 :
화면 폭 : 1440, 화면 높이 : 2560
화면 밀도 : 4.0
화면 밀도 DPI : 640
화면 스케일 밀도 : 4.0
그들은 그들이 가지고 있도록 XXXHDPI
카테고리 아래 모두 가을 같은 글꼴 크기이지만 Galaxy S8 텍스트는 상자에 들어 맞으며 Galaxy S7 텍스트는 너무 커서 상자 밖으로 나갑니다.
여기에 뭔가가 있습니까?
Canvas에 HTML 텍스트를 그릴 때 완전히 다른 방법이 있습니까?
============================================== ====
편집 :
더 자세한 내 사용 사례를 설명 :
내가 말하는거다 상자는 SVG/벡터 개체입니다.
label_down.xml
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="90dp"
android:height="45dp"
android:viewportWidth="90"
android:viewportHeight="45">
<path
android:fillColor="?attr/labelColor"
android:pathData="M 0 0 L 0 37.532 L 36.63 37.532 L 45 45 L 53.371 37.532 L 90 37.532 L 90 0 Z" />
</vector>
그럼 그 벡터에서
Bitamp
개체를 만들고 캔버스에
Bitmap
을 그립니다. 이런 일이 발생할 것이다 이렇게
VectorDrawableCompat vectorDrawableCompat = VectorDrawableCompat.create(getContext().getResources(), R.drawable.label_down, theme);
Bitmap bitmap = Bitmap.createBitmap(vectorDrawableCompat.getIntrinsicWidth(), vectorDrawableCompat.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
this.canvas.drawBitmap(bitmap, someXPos, someYPos, null);
:
지금 내 목표는 상자 안에 텍스트를 만드는 것입니다.
희망 사항이 더 적합합니다. 당신이 볼 수있는
나는 당신이 찾고있는 것을 달성하기 위해 주위에 다른 방법이 있어야한다고 생각한다. 상자를 만들고 그 상자에 HTML 텍스트를 그리는 것 외에 다른 것을 시도해야 할 수도있다. 당신이 그 상자에 텍스트를 넣는 것보다 사람들이 당신을 도울 수있는 것보다 훨씬 더 많은 일을 설명 할 수 있다면 ... –
@AdeelTurk 자세한 내용으로 내 질문을 수정했습니다. 감사합니다 –
내 채팅 응용 프로그램에 대해 동일한 UI를 만들었습니다. 나는 textview 배경으로 9.patch 이미지를 사용했고 모든 장치와 두 방향에서 모두 잘 작동했습니다. –