小刚张嘎 2018-01-29 09:28 采纳率: 100%
浏览 1888
已采纳

怎么在自定义ImageView上Draw东西,然后获取为Bitmap?

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?麻烦具体点,我小白

  • 写回答

5条回答 默认 最新

  • brave_shine 2018-01-31 08:22
    关注

    之前写过一个类似的,不过没自定义控件,在画布上画的文字,再把控件内容覆盖到上面,跟你这反过来就行了,你可以参考一下:

    //截取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();
    }
    

    希望能够帮助到你!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题