android:在 Canvas 中创建图像和填充颜色

android: Creating Image and filling colors in Canvas

嗨,我需要一个开始的方向。 我知道我可以创建一个矩形或圆形并在 it.So 内填充颜色,我想创建一个随机形状(如图标图像)并在其中填充颜色。正确的做法是什么?我可以将图像导入 canvas 并在特定位置更改其颜色吗?

这是我到目前为止所做的: 所以我创建了一个 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;
    }



}

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

基于 Font Awesome library for websites, you can try 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..."
    ... />

所以您可以从提供的库中选择一个随机形状并添加一个随机颜色。