2016-09-08 2 views
2

결과를 검색하는 동안 나는 이걸 보았습니다 How can I convert a View to a Drawable? 이것은 뒤에 TextView을 비트 맵으로 변환 한 다음 두 비트 맵을 결합 할 수 있다는 아이디어입니다. 그러나 TextView을 Bitmap으로 변환하면, 내가 원하지 않는 투명도를 잃게됩니다. 내 을 내 ImageView 대신 캔버스를 사용하는 하나의 이미지로하고 싶습니다.TextView와 이미지를 결합하고 이미지를 반환하는 방법은 무엇입니까?

내 생각은이 같은 이미지를 만드는 것입니다 : 여기

enter image description here

내가 그 흰색 테두리 드로어 블 형태로 텍스트를 둘러싸합니다. 그런 다음 이미지에이 Textview을 놓고 모든 것을 비트 맵으로 저장하십시오. 도와주세요

+0

하단의 좌표 그것을 할 사용자? 또는 앱에서 이미지를 구현하려면 어떻게해야합니까? – Daniele

+0

@Daniele 앱에서이 작업을 수행하고 싶지만 최종 결과는 이미지이어야하며 뷰의 레이어가 아니어야합니다. –

+0

사용자 지정 그리기를 만듭니다. Drawable을 사용하면 텍스트, 비트 맵 및 도형을 Canvas 객체에 렌더링하여 원하는 것을 할 수 있습니다. 또한 투명성을 완벽하게 제어 할 수 있습니다. –

답변

3

캔버스에 텍스트와 선을 그려 볼 수 있습니다.
다음은 drawable 이미지에 텍스트를 그리고, Bitmap을 반환하는 예제 메서드입니다.
개체에서 .setTypeface()을 호출하여 사용자 지정 글꼴을 설정할 수 있습니다.
회선을 그리려면 canvas.drawLine()으로 전화하십시오. 라인을 사용자 정의하려면 새 Paint 오브젝트를 만들고, 색상 및 너비를 .setColor().setStrokeWidth()으로 설정하고 라인 좌표와 함께 drawLine()으로 전달하십시오.

public Bitmap drawTextOnBitmap(Context context, int resId, String text) { 

     // prepare canvas 
     Resources resources = context.getResources(); 
     float scale = resources.getDisplayMetrics().density; 
     Bitmap bitmap = BitmapFactory.decodeResource(resources, resId); 

     android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); 
     // set default bitmap config if none 
     if (bitmapConfig == null) { 
      bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888; 
     } 
     // resource bitmaps are immutable, so we need to convert it to mutable one 
     bitmap = bitmap.copy(bitmapConfig, true); 
     Canvas canvas = new Canvas(bitmap); 

     // new antialiased Paint 
     TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG); 
     // text color - #3D3D3D 
     paint.setColor(Color.rgb(61, 61, 61)); 
     // text size in pixels 
     paint.setTextSize((int) (bitmap.getHeight()/10 * scale)); 
     // text shadow 
     paint.setShadowLayer(1f, 0f, 1f, Color.WHITE); 

     // set text width to canvas width minus 16dp padding 
     int textWidth = canvas.getWidth() - (int) (16 * scale); 

     // init StaticLayout for text 
     StaticLayout textLayout = new StaticLayout(text, paint, textWidth, 
       Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false); 

     // get height of multiline text 
     int textHeight = textLayout.getHeight(); 

     // get position of text's top left corner 
     float x = (bitmap.getWidth() - textWidth)/2; 
     float y = (bitmap.getHeight() - textHeight)/2; 

     // draw text to the Canvas center 
     canvas.save(); 
     canvas.translate(x, y); 
     textLayout.draw(canvas); 
     canvas.restore(); 

     return bitmap; 
    } 

업데이트 :
가 사각형이 방법이 추가 그리려면

 Paint p = new Paint(); 
     p.setStyle(Paint.Style.STROKE); 
     p.setStrokeWidth(24); 
     RectF rectF = new RectF(80, 150, 200, 350); 
     canvas.drawRect(rectF, p); 

매개 변수 새 RectF()에 대한 :
는 X가 왼쪽 좌표를 왼쪽
직사각형의 부분
상단 012 3, 는 Y는

는 X가
하단 사각형의 오른쪽 좌표 사각형의 상단 좌표
는 Y는 당신이 필요합니까 사각형

+0

canvas.drawRect() 좌표가 도움이 될 수 있습니까? 위의 방법으로 시도하고있는 것은 무엇이든 작동하지 않는 것 같습니다 –

+0

직사각형을 그리는 코드로 제 대답을 업데이트했습니다. – dzikovskyy

+0

그러나 이것들은 정적 점이므로 텍스트 주위에 놓을 수는 없습니다. –

관련 문제