이미지 & 텍스트 합성
화면 크기별로 구분하여 마커 이미지에 인덱스를 합성한다.
합성할 때 번호의 숫자에 따라서 크기를 조절할 수 있도록 설정하였다.
private static final float DEFAULT_TEXT_SIZE = 50; // xxxhdpi 기준 private static final float XXXHDPI = 640; private static final boolean DBG = false; /** * 리소스 Drawable 위에 텍스트 설정 * @param context 리소스를 가져올 context * @param drawableId 리소스 아이디 * @param text 합칠 텍스트 * @return BitmapDrawable 합친 이미지 */ public static BitmapDrawable writeOnDrawable(Context context, int drawableId, String text){ // dpi 측정 DisplayMetrics metrics = new DisplayMetrics(); WindowManager mgr = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); mgr.getDefaultDisplay().getMetrics(metrics); // dpi에 따른 텍스트 기본 크기 설정 final float dpi_text_size = metrics.densityDpi * DEFAULT_TEXT_SIZE / XXXHDPI ; // 텍스트 길이에 따른 텍스트 크기 설정 ( 3자리 이상은 힘듬 ) final float textSize = dpi_text_size - ( dpi_text_size / 4f * ( text.length() - 1) ); // 마커 이미지 Bitmap bm = BitmapFactory.decodeResource(context.getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true); // 텍스트 스타일 Paint paint = new Paint(); paint.setStyle(Paint.Style.FILL); paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD)); paint.setColor(Color.WHITE); paint.setTextSize(textSize); // 텍스트 위치 (가운데 정렬) final float textPositionX = ( bm.getWidth() - paint.measureText(text) ) / 2f; final float addAlpha = DEFAULT_TEXT_SIZE / 6 * metrics.densityDpi / XXXHDPI; final float textPositionY = bm.getHeight()/2 + ( text.length() == 1 ? addAlpha : 0); // 텍스트 입력 Canvas canvas = new Canvas(bm); canvas.drawText(text, textPositionX , textPositionY, paint); return new BitmapDrawable(bm); }
반응형
'Android Story' 카테고리의 다른 글
[ Android ] FFplay 문서 번역 (0) | 2016.12.13 |
---|---|
[ Android ] FFMpeg 패키지 연동하기 (15) | 2016.12.13 |
[ Android ] inflate (0) | 2016.12.07 |
[ Android ] 다음 맵에서 지원하지 않는 점선 라인.. 해결?? (0) | 2016.11.26 |
[ Android ] 사이즈가 큰 이미지 뷰 (0) | 2016.11.25 |
[ Android ] adb shell screenrecord (0) | 2016.11.24 |
[ Android ] GPS 구하기 (8) | 2016.11.23 |
[ Android ] Theme.AppCompat 사용시, statusbar가 UI와 겹칠때 (0) | 2016.11.17 |