2015-09-17 57 views
1

嗨,我需要一个方向来踢开始。 我知道我可以创建一个矩形或圆形并在其中填充颜色。因此,我想要创建一个随机形状(如图标图像)并在其中填充颜色。什么是正确的做法?我可以将图像导入到画布并在特定位置更改其颜色吗?android:在Canvas中创建图像并填充颜色

这里是我迄今所做的: 所以我创建了一个帆布收到位图 画形状(矩形和圆形),现在我想添加形状像电话图标并改变其颜色 我的代码:

public class MainActivity extends Activity { 
    Context ctx =this; 
    Bitmap mcontactPhoto; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Bitmap bp = drawTextToBitmap (this,R.drawable.bitmap_le_lo,"MMMM","blah",200); 
     Drawable d = new BitmapDrawable(getResources(), bp); 
     iv.setImageDrawable(d); 

    } 

    public Bitmap drawTextToBitmap(Context gContext, 
            int gResId, 
            String gText,String hText ,int TextSize) { 
     int m = TextSize; 
     Resources resources = gContext.getResources(); 
     float scale = resources.getDisplayMetrics().density; 
     Bitmap bitmap = 
       BitmapFactory.decodeResource(resources, gResId); 

     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 imutable, 
     // so we need to convert it to mutable one 
     bitmap = bitmap.copy(bitmapConfig, true); 

     Canvas canvas = new Canvas(bitmap); 
     Paint paint =new Paint(Paint.ANTI_ALIAS_FLAG); 
     Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setColor(Color.WHITE); 
     mPaint.setStrokeWidth(8); 

     canvas.drawRect(71, 71, 320, 320, mPaint); 
     canvas.drawRect(391, 71, 1189, 320, mPaint); 
     canvas.drawRect(71, 390, 1189, 639, mPaint); 

     canvas.drawCircle(71, 71, 40, paint); 
     canvas.drawCircle(391, 71, 40, paint); 
     canvas.drawCircle(71, 390, 40, paint); 

     canvas.drawCircle(71, 71, 40, mPaint); 
     canvas.drawCircle(391, 71, 40, mPaint); 
     canvas.drawCircle(71, 390, 40, mPaint); 


     int x = 420; 
     int y = (249+m)/2+71/2; 
     paint.setTextSize(m); 
     paint.setColor(Color.BLUE); 
     canvas.drawText(gText, x, y, paint); 


     int x1 = 101; 
     int y1 = (391-71/2)+(249+m)/2; 
     paint.setTextSize(m); 
     paint.setColor(Color.WHITE); 
     canvas.drawText(hText, x1, y1, paint); 



     paint.setTextSize(50); 
     paint.setColor(Color.WHITE); 
     canvas.drawText("1", 71-12.5f, 71+12.5f, paint); 


     return bitmap; 
    } 



} 
+0

看看这个答案:http://stackoverflow.com/a/5208500/852049 – Karolis

+0

Karolis谢谢!你可以提出编辑问题吗? –

回答

1

如果你正在绘制静态形状,我建议使用一个库。

基于Font Awesome图书馆的网站,你可以尝试this图书馆。这个想法是,你有静态图像作为一种字体(矢量图形很好地扩展),然后将其作为文本对象在屏幕上绘制。它允许多种方便的定制

在你的布局XML,这将是那么容易,因为:

<com.joanzapata.iconify.widget.IconTextView 
    android:text="I {fa-heart-o} to {fa-code} on {fa-android}" 
    android:shadowColor="#22000000" 
    android:shadowDx="3" 
    android:shadowDy="3" 
    android:shadowRadius="1" 
    android:textSize="40sp" 
    android:textColor="#FF..." 
    ... /> 

所以,你可以挑选从提供的库随机的形状,并添加一个随机的颜色。

+0

Karolis再次感谢!我可以制作一张我自己的矢量图形,并在画布内改变颜色 –

+0

您可以。 Google用于绘制填充的多边形。另一个例子:http://stackoverflow.com/questions/2047573/how-to-draw-filled-polygon – Karolis