public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view= View.inflate(this,R.layout.activity_main,null);
//布局参数
ViewGroup.LayoutParams layoutParams=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
ImageView imageView=new ImageView(this);
//设置布局参数
imageView.setLayoutParams(layoutParams);
imageView.setBackgroundColor(Color.RED);
//把textview加入RelativeLayout中
((RelativeLayout)view).addView(imageView);
//显示整个布局
setContentView(view);
setContentView(new SmileyView(this));
}
}
class SmileyView extends View {
private Paint mCirclePaint;
private float mCenterX;
private float mCenterY;
private float mRadius;
public SmileyView(Context context) {
this(context, null);
}
public SmileyView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SmileyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initPaints();
}
private void initPaints() {
mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mCirclePaint.setStyle(Paint.Style.FILL);
mCirclePaint.setColor(Color.YELLOW);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int w = MeasureSpec.getSize(widthMeasureSpec);
int h = MeasureSpec.getSize(heightMeasureSpec);
int size = Math.min(w, h);
setMeasuredDimension(size, size);
}
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mCenterX = w / 2f;
mCenterY = h / 2f;
mRadius = Math.min(w, h) / 2f;
}
protected void onDraw(Canvas canvas) {
canvas.drawCircle(mCenterX, mCenterY, mRadius, mCirclePaint);
// draw eyes
}
}
上面这个代码如何修改为在ImageView上显示画的圆,然后把ImageView转化成Bitmap?麻烦具体点,我小白
之前写过一个类似的,不过没自定义控件,在画布上画的文字,再把控件内容覆盖到上面,跟你这反过来就行了,你可以参考一下:
//截取scrollview的屏幕
public static Bitmap getScrollViewBitmap(NestedScrollView scrollView) {
int h = 0;
Bitmap bitmap;
for (int i = 0; i < scrollView.getChildCount(); i++) {
h += scrollView.getChildAt(i).getHeight();
}
// 创建相应大小的bitmap
bitmap = Bitmap.createBitmap(scrollView.getMeasuredWidth(), h,
Bitmap.Config.ARGB_4444);
final Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.parseColor("#FFFFFF"));
drawTextToBitmap(scrollView.getContext(), canvas, scrollView.getMeasuredWidth(), h);
scrollView.draw(canvas);
return bitmap;
}
// 给图片添加水印
public static void drawTextToBitmap(Context context, Canvas canvas, int width, int height) {
String logo = "戚大爷";
Paint paint = new Paint();
paint.setColor(SkinManager.getInstance().getResourceManager().getColor("future_text_bg"));
paint.setAlpha(80);
paint.setAntiAlias(true);
paint.setTextSize((float) DensityUtil.dip2px(context, 30));
canvas.save();
canvas.rotate(-30);
float textWidth = paint.measureText(logo);
int index = 0;
for (int positionY = -DensityUtil.dip2px(context, 30); positionY <= height; positionY += DensityUtil.dip2px(context, 80)) {
float fromX = -0.75f * height + (index++ % 2) * textWidth;
for (float positionX = fromX; positionX < width; positionX += textWidth * 2) {
canvas.drawText(logo, positionX, positionY, paint);
}
}
canvas.restore();
}
希望能够帮助到你!
一般都是 在自定义View上面画东西,然后保存成bitmap
//generate picture
private Bitmap convertViewToBitmap(View view){
Bitmap bitmap = Bitmap.createBitmap(view.getLayoutParams().width, view.getLayoutParams().height,
Bitmap.Config.RGB_565);
Log.i("blb", "-------convert view's height, :" + view.getLayoutParams().height + ", width: " + view.getLayoutParams().width + ", getHeight:" + view.getHeight());
//利用bitmap生成画布
Canvas canvas = new Canvas(bitmap);
//把view中的内容绘制在画布上
view.draw(canvas);
return bitmap;
}
然后这样就生成bitmap了。
还是不知道如何获取到画出来的界面。
public static Bitmap convertViewToBitmap(View view){
view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
return bitmap;
}
public class MainActivity extends AppCompatActivity {
ImageView imageView; Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imageView=(ImageView) this.findViewById(R.id.imageView);
View view= View.inflate(this,R.layout.activity_main,null);
//布局参数
ViewGroup.LayoutParams layoutParams=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
setContentView(new SmileyView(this,null));
bitmap= convertViewToBitmap(view);
if(bitmap!=null){
Log.d("xg","not null");
//imageView.setImageBitmap(bitmap);
}else {
Log.d("xg","null,null, null");
}
//调用保存方法
saveBitmap();
}
//吧view转化为bitmap
public static Bitmap convertViewToBitmap(View view){
view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
Log.i("xg",view.getMeasuredWidth()+"--"+view.getMeasuredHeight());
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
view.destroyDrawingCache();
return bitmap;
}
public void saveBitmap() {
String state= Environment.getExternalStorageState();
File file;
try {
if(Environment.MEDIA_MOUNTED.equals(state)){
// 保存图片到SD卡上
file = Environment.getExternalStorageDirectory();
}else{
file =getFilesDir();
}
FileOutputStream stream = new FileOutputStream(file.getAbsolutePath()+"/sign/"+System.currentTimeMillis()+".png");
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
Toast.makeText(MainActivity.this, "保存图片成功", 0).show();
stream.flush();
stream.close();
} catch (Exception e) {
Toast.makeText(MainActivity.this, "保存图片失败", 1).show();
e.printStackTrace();
}
}
}
class SmileyView extends View {
private Paint mCirclePaint;
private float mCenterX;
private float mCenterY;
private float mRadius;
public SmileyView(Context context) {
this(context, null);
}
public SmileyView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SmileyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initPaints();
}
private void initPaints() {
mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mCirclePaint.setStyle(Paint.Style.FILL);
mCirclePaint.setColor(Color.YELLOW);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int w = MeasureSpec.getSize(widthMeasureSpec);
int h = MeasureSpec.getSize(heightMeasureSpec);
int size = Math.min(w, h);
setMeasuredDimension(size, size);
}
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mCenterX = w / 2f;
mCenterY = h / 2f;
mRadius = Math.min(w, h) / 2f;
}
protected void onDraw(Canvas canvas) {
canvas.drawCircle(mCenterX, mCenterY, mRadius, mCirclePaint);
// draw eyes
}
}
bitmap都已经不为空了,还是无法保存,保存代码试过的,也没问题,读写权限,包括手机上的储存权限也是开的。