안 드 로 이 드(Android)개발 의 공유 텍스트 가 있 는 그림

머리말
우리 가 자주 사용 하 는 왕 이 운 음악 을 생각해 보 자.가 사 를 노래의 그림 과 함께 조합 하여 그림 으로 만 들 수 있 도록 허락 해 주 었 다.우 리 는 이 그림 을 다시 공유 하면 된다.
그렇다면 이 편의 내용 은 글자 가 있 는 그림 을 만 드 는 것 이다.
여기 도 문맥 을 기록 합 니 다.분실 물 취급 앱 을 만 들 었 기 때문에 누군가가 분실 물 을 제출 한 후에 이 소식 을 공유 할 수 있 습 니 다.이 소식 의 내용 은 물품 의 정보 와 그림 이 있 는데 위 챗 SDK 는 할 수 없 기 때문에 물품 정 보 를 그림 에 삽입 하여 공유 하려 고 합 니 다.먼저 효과 도 를 놓 겠 습 니 다.
 
이 공 유 된 그림 은 매우 간단 하 다.위 는 그림 이 고 아래 는 문자 가 한데 조합 되 어 있다. 
먼저 방안 의 원 리 는 Bitmap 를 바탕 으로 하 는 Canvas 를 조작 함으로써 이 루어 진 것 이 고 생각 은 간단 하 다 는 것 을 알 아야 한다.
     ① 캔버스 를 Bitmap 에 활용
     ② 캔버스 위 에 촬영 한 그림 그리 기
     ③ ② 그 려 진 그림 아래 에 텍스트 그리 기
첫 번 째 단 계 는 간단 합 니 다.우 리 는 비트 맵 을 만 들 고 Canvas 에 불 러 오 면 됩 니 다.촬영 한 그림 의 이름 이 bitmap 이 라 고 가정 하면 코드 는 다음 과 같 습 니 다.

Bitmap.Config config = bitmap.getConfig();
Bitmap shareBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), config);
Canvas canvas = new Canvas(shareBitmap);
여기까지 우 리 는 이 그림 의 너비 와 높이 를 어떻게 설정 하 는 것 이 비교적 합 리 적 인지 생각해 야 한다.위의 코드 는 촬영 한 사진 과 마찬가지 로 설정 되 어 있 습 니 다.즉,문 자 를 추가 하려 면 그림 에 만 표시 할 수 있 습 니 다.이때 그림 의 색깔 이 비교적 풍부 하 다 면 글 자 를 위 에 겹 치면 잘 보이 지 않 을 것 이다.내 가 위의 그림 을 찍 는 방법 에 따 르 면 사진 을 찍 는 아래 에 공간 을 늘 려 문 자 를 그 리 는 것 이다.여기 서 설정 할 높이 는 좀 더 커 야 한다.얼마나 큰 지 는 나중에 얘 기 하 자. 
두 번 째 단 계 는 캔버스 에서 촬영 한 사진 을 그 리 는 것 입 니 다.여 기 는 간단 합 니 다.바로 이런 코드 가 있 습 니 다.

canvas.drawBitmap(bitmap, 0, 0, paint);
이 어 세 번 째 단계 이자 가장 어 려 운 곳 이다.canvas 에서 drawText 방법 을 직접 사용 하여 문 자 를 그 릴 수 없습니다!왜?그림 의 너비 보다 텍스트 내용 이 클 수 있 기 때문에 그림 보다 텍스트 가 더 넓 을 때 drawText 를 사용 하면 텍스트 내용 을 줄 을 바 꿀 수 없습니다.그러면 텍스트 가 잘 립 니 다.
해결 방안 은 TextPaint 라 는 Paint 의 하위 클래스 를 사용 하 는 것 입 니 다.이 종 류 는 Static Layout 에 맞 춰 문 자 를 그 려 야 합 니 다.사용법 을 보 겠 습 니 다.

Paint paint = new Paint();
paint.setColor(Color.BLACK); //     
TextPaint textpaint = new TextPaint(paint);
textpaint.setTextSize(textSize); //     
textpaint.setAntiAlias(true); //    
StaticLayout title_layout = new StaticLayout(title.getText().toString(), textpaint, sourceBitmapWidth, Layout.Alignment.ALIGN_CENTER, 1f, 1f, true);
우리 의 Paint 대상 을 통 해 TextPaint 를 만 들 고 톱날 과 텍스트 크기 를 설정 합 니 다.이 어 static Layout 대상 을 만 듭 니 다.구조 방법 에 들 어 갈 매개 변 수 는 문자 내용,TextPaint 대상,텍스트 너비,정렬 방식,행거 배수,행거 가산 수 와 내부 거 리 를 포함 하 는 지 여부 입 니 다.여기 서 가장 중요 한 것 은 텍스트 폭 을 설정 하 는 것 입 니 다.텍스트 폭 이 이 값 보다 클 때 자동 으로 줄 을 바 꿉 니 다.
우리 가 이 Static Layout 를 구성 한 후에 캔버스 를 포 지 셔 닝 한 다음 에 문 자 를 그 릴 수 있 습 니 다.

canvas.translate(0, sourceBitmapHeight); //           
title_layout.draw(canvas); //         
 이 몇 단 계 를 마 친 후에 Canvas 의 Bitmap 에는 그림 과 문자 가 있 을 것 이다.
하지만 우리 의 문 제 는 아직 해결 되 지 않 았 다.
① 이 공유 되 는 비트 맵 의 높이 는 과연 얼마 일 까?위 에서 우 리 는 이 문 제 를 뛰 어 넘 었 습 니 다.사실은 이미 답 이 있 습 니 다.우 리 는 그것 의 높이 를 그림 의 내용 에 우리 가 만 든 Static Layout 의 높이 를 더 하면 됩 니 다.이런 그림 의 높이 는 문자 내용 의 다소 변화 에 따른다.StaticLayout 의 높이 를 가 져 오 는 것 은 간단 합 니 다:

title_layout.getHeight()
②  이 럴 때 우리 가 앱 에 이 그림 을 직접 표시 하면 문제 가 없 지만 우리 가 위 챗 에 그림 을 공유 하면 그림 의 문자 부분 이 완전히 검은색 이 되 어 문자 도 볼 수 없다 는 것 을 알 게 될 것 이다.여기 서 해결 방법 도 간단 합 니 다.그림 을 그 릴 때 전체 그림 에 흰색 배경 을 그립 니 다.

canvas.drawColor(Color.WHITE);
여 기 는 거의 완성 되 었 습 니 다.코드 도 나 와 서 참고 하 세 요.

//         imageBitmap
  private Bitmap getShareingBitmap(int textSize) {
    Bitmap.Config config = imageBitmap.getConfig();
    int sourceBitmapHeight = imageBitmap.getHeight();
    int sourceBitmapWidth = imageBitmap.getWidth();
    Paint paint = new Paint();
    paint.setColor(Color.BLACK); //     
    TextPaint textpaint = new TextPaint(paint);
    textpaint.setTextSize(textSize); //     
    textpaint.setAntiAlias(true); //    
    StaticLayout title_layout = new StaticLayout(title.getText().toString(), textpaint,
        sourceBitmapWidth, Layout.Alignment.ALIGN_CENTER, 1f, 1f, true);
    StaticLayout desc_layout = new StaticLayout("    :"+description.getText().toString(), textpaint,
        sourceBitmapWidth, Layout.Alignment.ALIGN_NORMAL, 1f, 1f, true);
    StaticLayout phone_layout = new StaticLayout("    :"+phone.getText().toString(), textpaint,
        sourceBitmapWidth, Layout.Alignment.ALIGN_NORMAL, 1f, 1f, true);
    Bitmap share_bitmap = Bitmap.createBitmap(sourceBitmapWidth, sourceBitmapHeight +
        title_layout.getHeight() + desc_layout.getHeight() + phone_layout.getHeight(),
        config);
    Canvas canvas = new Canvas(share_bitmap);
    canvas.drawColor(Color.WHITE);
    canvas.drawBitmap(imageBitmap, 0, 0, paint); //     
    canvas.translate(0, sourceBitmapHeight);
    title_layout.draw(canvas);

    canvas.translate(0, title_layout.getHeight());
    phone_layout.draw(canvas);

    canvas.translate(0, phone_layout.getHeight());
    desc_layout.draw(canvas);
    return share_bitmap;
  }
총결산
먼저 모든 문자 내용 의 높이 를 계산 한 다음 에 그림 의 크기 를 구축 하고 흰색 배경 을 그 리 며 촬영 그림 을 그 리 며 촬영 그림 에서 문 자 를 그립 니 다.이상 이 본 고의 모든 내용 입 니 다.여러분 의 안 드 로 이 드 개발 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기