标签: android-canvas

将视图转换为位图

可能重复:
将视图转换为位图而不在Android中显示它?

我正在尝试将视图从以下引用链接转换为位图

链接文字

现在的问题是如何才能获得仅从视图转换的位图.在示例作者中使用了relativelayout.dispatchDraw(c),但这一行给出了编译时错误,即

来自ViewGroup类型的方法dispatchDraw(Canvas)不可见

这是我的代码,我在onCreate函数中编写了以下代码

    Canvas c=null;

    //Create Layout
    RelativeLayout relativeView ;           
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT
    );

    relativeView = new RelativeLayout(this);            
    relativeView.setLayoutParams(lp);

    //Background of Layout
    Bitmap viewBgrnd  = BitmapFactory.decodeResource(getResources(),R.drawable.bgblack);
    relativeView.setBackgroundDrawable(new BitmapDrawable(viewBgrnd));

    //associated with canvas 
    Bitmap returnedBitmap =               Bitmap.createBitmap(320,480,Bitmap.Config.ARGB_8888);     
    c = new Canvas(returnedBitmap);
    Paint paint = new Paint();


    //Create Imageview that holds image             
    ImageView newImage = new ImageView(this);
    Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bgpink);
    newImage.setImageBitmap(srcBitmap);

    TextView newText = new  TextView(this);

    newText.setText("This is the text that its going to …
Run Code Online (Sandbox Code Playgroud)

android bitmap android-canvas

10
推荐指数
2
解决办法
2万
查看次数

画布捏缩放到界限内

我已经坚持这个问题八个小时了,所以我觉得是时候得到一些帮助了.

在我开始我的问题之前,我只会让我知道我已经通过这个网站和谷歌,我找到的答案都没有帮助.(是一个,另一个,另一个.)

这是交易:我有一个扩展的类SurfaceView(让我们称之为MySurface)并覆盖其中的许多方法.通常情况下,它会绘制几个正方形和文本框,这一切都很好.一旦用户开始触摸,它就会转换为a Bitmap,然后绘制每个帧,直到用户释放.

这就是问题:我想实现这样一种功能:用户可以将两根手指放在屏幕上,捏缩放,也可以平移(但只能用两根手指向下).

我发现了一些缩放到缩放的实现,并通过以下方式将它们改编为我的Canvas对象MySurface:

public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();

    canvas.scale(mScaleVector.z, mScaleVector.z); // This is the scale factor as seen below
    canvas.translate(mScaleVector.x, mScaleVector.y); // These are offset values from 0,0, both working fine

    // Start draw code

    // ...

    // End draw code

    canvas.restore();
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        float factor = detector.getScaleFactor();
        if …
Run Code Online (Sandbox Code Playgroud)

android android-canvas android-gesture

10
推荐指数
1
解决办法
9741
查看次数

改变android中的图像形状

我成功地在画布上的图像中实现了一个缩放放大/缩小和拖放功能.

现在我想要的是重新调整大小,下面的图像链接基于iPhone App在此输入图像描述

如何使用iPhone SDK更改图像的形状?

那么我怎样才能在Android中实现这种功能呢?

android image android-image android-canvas

10
推荐指数
1
解决办法
1391
查看次数

如何在ImageView Android上添加标记/ Pin?

我想问一下如何在imageView上实现或添加标记.我使用svglib渲染了一个SVG并使用了customImageView,这样我就可以缩放和平移图像.

这是我如何使用我的customImageView的代码

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        SVG svg;
        switch (mNum) {

        case 1:
            svg = SVGParser.getSVGFromResource(getResources(), R.raw.t1);
            break;
        case 2:
            svg = SVGParser.getSVGFromResource(getResources(), R.raw.t2);
            break;
        case 3:
            svg = SVGParser.getSVGFromResource(getResources(), R.raw.t3);
            break;
        case 4:
            svg = SVGParser.getSVGFromResource(getResources(), R.raw.t4);
            break;
        default:
            svg = SVGParser.getSVGFromResource(getResources(),
                    R.raw.android);

        }

        View v = inflater.inflate(R.layout.hello_world, container, false);
        View tv = v.findViewById(R.id.text);
        imageView = (GestureImageView) v.findViewById(R.id.imageView1);
        imageView.setStrict(false);
        imageView.setStartingScale(lastScale);
        // if(lastXPosition!=0 && lastYPosition!=0)
        imageView.setStartingPosition(lastXPosition, lastYPosition);
        // Log.i("tag",
        // "lastXPosition" + lastXPosition);
        // …
Run Code Online (Sandbox Code Playgroud)

java android marker imageview android-canvas

10
推荐指数
2
解决办法
1万
查看次数

如何旋转TextView而不剪切其边界?

我正在尝试旋转我的子类TextView使用canvas.rotate():

canvas.save();

final int w = getWidth();
final int h = getHeight();

float px = w/2f;
float py = h/2f;
canvas.rotate(mAngle, px, py);

super.draw(canvas);

canvas.restore();
Run Code Online (Sandbox Code Playgroud)

旋转TextView,但我的视图边界被剪裁:

插图

我知道这是因为我的视图大小 - 它在旋转期间不会发生变化.但是,如果我将改变宽度\高度onMeasure问题将保持 - 我正在使用LayoutParams.WRAP_CONTENT,所以TextView只需根据提供的值更改它的大小setMeasuredDimensions.

我怎么解决这个问题?

android android-canvas

10
推荐指数
1
解决办法
6197
查看次数

自定义视图drawArc,检测用户触摸弧的绘制路径

我正在创建一个自定义视图,这是一种圆弧滑块进度视图.我可以根据用户触摸的位置(在x轴上)通过计算扫描来绘制更多或更少的弧,我通过首先计算百分比来做到这一点用户沿x轴触摸的位置.0%将一直向左,100%将一直向右.

我想更进一步,而不是基于用户按下的x坐标绘制弧,我想让它仅在用户触摸实际弧形绘制路径时移动,因此它更加逼真.我仍然是新的自定义视图,我的数学是有限的,但如果我得到一些提示,我将不胜感激

当用户沿着x轴移动手指在矩形区域上的百分比时,它的外观如何

class ArcProgress extends View {

    Context cx;
    float width;

    float height;
    float center_x, center_y;
    final RectF oval = new RectF();
    final RectF touchArea = new RectF();

    float sweep = 0;
    float left, right;
    int percent = 0;

    public ArcProgress(Context context) {
        super(context);
        cx = context;

    }

    public int getPercentage() {
        return percent;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        setBackgroundColor(0xfff0ebde);

        width = (float) getWidth();
        height = (float) getHeight();

        float radius;

        if (width > height) {
            radius = …
Run Code Online (Sandbox Code Playgroud)

java android android-canvas

10
推荐指数
2
解决办法
6111
查看次数

Android画布保存总是java.io.IOException:打开失败:ENOENT(没有这样的文件或目录)

我有一个画布应用程序.我正在尝试用Canvas+ 创建一个签名应用程序onTouchListener.

这是我的保存方法,我尝试将签名保存到图像:

private void save() {
    hideMenuBar();
    View content = this;
    content.setDrawingCacheEnabled(true);
    content.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    Bitmap bitmap = content.getDrawingCache();
    String path = Environment.getExternalStorageDirectory().getAbsolutePath();
    String imgPath = path+"/imotax/capture/spop/ttd/image" + "temp" + ".jpg";
    File file = new File(imgPath);
    FileOutputStream ostream;
    try {
        file.createNewFile();
        ostream = new FileOutputStream(file);
        bitmap.compress(CompressFormat.JPEG, 100, ostream);
        ostream.flush();
        ostream.close();
        Toast.makeText(getContext(), "image saved", 5000).show();
    } catch (Exception e) {
        e.printStackTrace();
        Log.i("ttd", e.toString());
        Toast.makeText(getContext(), "Failed To Save", 5000).show();
        showMenuBar();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但它总是错误或进入catch带有此错误的语句:

java.io.IOException: open failed: ENOENT …
Run Code Online (Sandbox Code Playgroud)

android android-canvas

10
推荐指数
2
解决办法
4万
查看次数

VectorDrawable:如何在画布上定位?

您好我的自定义视图:

MyCustomView extends View 
Run Code Online (Sandbox Code Playgroud)

我做了一个VectorDrawable

mMyVectorDrawable = VectorDrawableCompat.create(getContext().getResources(), R.drawable.ic_some_image, null);
Run Code Online (Sandbox Code Playgroud)

我已经设定了界限

mMyVectorDrawable.setBounds(0, 0, mMyVectorDrawable.getIntrinsicWidth(), mMyVectorDrawable.getIntrinsicHeight());
Run Code Online (Sandbox Code Playgroud)

我在画布上绘制它

mMyVectorDrawable.draw(canvas);
Run Code Online (Sandbox Code Playgroud)

我在0,0位置看到了图像

但我该如何定位呢?如何定位Rect,我认为前两个参数setBounds将是X和Y坐标的开始绘图,但这只会影响尺寸.

如何将矢量绘图放在画布上?

谢谢阅读

android android-canvas android-vectordrawable

10
推荐指数
3
解决办法
9132
查看次数

如何设置笔触颜色以在画布上绘制矩形?

我想绘制一个圆形矩形,其笔划为蓝色,填充为红色,但我在Paint类中找不到设置笔触颜色的方法.我怎样才能做到这一点?

    mCanvas.drawColor(mBackgroundColor, PorterDuff.Mode.CLEAR);
    mCanvas.setDrawFilter(mPaintFlagsDrawFilter);

    mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
    mPaint.setColor(Color.RED);
    mPaint.setStrokeWidth(2);
    mPaint.setStrokeCap(Paint.Cap.ROUND);
    mRectF.set(0, 0, mWidth, mHeight);
    mCanvas.drawRoundRect(mRectF, 10, 10, mPaint);
Run Code Online (Sandbox Code Playgroud)

android android-canvas

10
推荐指数
1
解决办法
1万
查看次数

在TextView中查找单个Character的精确坐标

目前我正在使用paintObject.measureText(textCopy.substring(0,i))迭代TextView文本的副本.例如,measureText("abc".substring(0,1))将给出'b'的相对x坐标.我得到的y坐标layout.getLineTop().这是工作,但不准确X坐标非等宽字体.我可以稍微校准,但在每个设备上它的工作方式不同.

我能想到的最好的解决方案是覆盖负责在屏幕上绘制TextView的类,并希望获得绘制到屏幕上的每个字符的坐标.

有谁知道我需要覆盖什么类来完成这个?或者其他一些创意解决方案?

android textview android-screen android-canvas

9
推荐指数
2
解决办法
1825
查看次数