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..."
... />
所以您可以从提供的库中选择一个随机形状并添加一个随机颜色。
嗨,我需要一个开始的方向。 我知道我可以创建一个矩形或圆形并在 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..."
... />
所以您可以从提供的库中选择一个随机形状并添加一个随机颜色。