标签: android-canvas

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

Android - 如何圆形缩放/放大部分图像?

我试图让用户触摸图像,然后基本上一个圆形放大镜将显示将允许用户更好地选择图像上的某个区域.当用户释放触摸时,放大的部分将消失.这用于几个照片编辑应用程序,我正在尝试实现我自己的版本.我下面的代码确实放大了图像视图的圆形部分,但是一旦我松开手指就不会删除或清除缩放.我目前设置一个位图到画布使用canvas = new Canvas(bitMap);然后设置imageview takenPhoto.setImageBitmap(bitMap); 我不知道我是否正确的方式.onTouch代码如下:

zoomPos = new PointF(0,0);
        takenPhoto.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                 int action = event.getAction(); 
                    switch (action) { 
                        case MotionEvent.ACTION_DOWN: 
                            zoomPos.x = event.getX();
                            zoomPos.y = event.getY();
                            matrix.reset();
                            matrix.postScale(2f, 2f, zoomPos.x, zoomPos.y);
                            shader.setLocalMatrix(matrix);
                            canvas.drawCircle(zoomPos.x, zoomPos.y, 20, shaderPaint);
                            takenPhoto.invalidate();
                            break; 
                        case MotionEvent.ACTION_MOVE: 
                            zoomPos.x = event.getX();
                            zoomPos.y = event.getY();
                            matrix.reset();
                            matrix.postScale(2f, 2f, zoomPos.x, zoomPos.y);
                            canvas.drawCircle(zoomPos.x, zoomPos.y, 20, shaderPaint);
                            takenPhoto.invalidate();
                            break; 
                        case MotionEvent.ACTION_UP:   
                            //clear zoom here?

                            break; 
                        case MotionEvent.ACTION_CANCEL: 
                            break; 
                        default: 
                            break; …
Run Code Online (Sandbox Code Playgroud)

android image-zoom touch-event android-imageview android-canvas

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

我们可以在陀螺仪给出的两点之间在android画布上绘制线条吗?

是否可以通过相机在Android中从A点(用户首先触摸)和B点(用户触摸第二个)绘制一条线.

用户可以触摸第一个点并沿其他方向旋转相机以点击第二个点.

我正在使用gyroscope,accelerometermagnetometer(传感器融合)我在触摸时得到x,y,z坐标.

但是我们可以在用户触摸的画布上绘制3D图像.类似于MagicPlan应用正在做的事情.

android accelerometer gyroscope android-canvas

22
推荐指数
1
解决办法
1080
查看次数

在扩展/缩小或在android中拖动后获取画布坐标

我正在开发一个应用程序,其中我粘贴图像,在画布上绘图和绘画.此应用程序还可以向上/向下缩放画布或将其拖动到不同的位置.我的问题是:在缩放或拖动画布后,我无法获得正确的画布坐标.我想在缩放或拖动画布后绘制手指画,但无法找到我触摸的正确位置.. :(我也是新的蜜蜂.这是代码.

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

    canvas.save();
    //canvas.translate(mPosX, mPosY);
    canvas.scale(mScaleFactor, mScaleFactor, super.getWidth() * 0.5f,
            super.getHeight() * 0.5f);
    mIcon.draw(canvas);
    for (Path path : listPath) {
        canvas.drawPath(path, paint);
    }
    canvas.restore();
}

public TouchExampleView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    // Let the ScaleGestureDetector inspect all events.
    mScaleDetector.onTouchEvent(ev);

    final int action = ev.getAction();
    switch (action & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN: {
        final float x = ev.getX();
        final float y = …
Run Code Online (Sandbox Code Playgroud)

scaling android position touch-event android-canvas

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

如何根据设备宽度和字体大小测量TextView高度?

我在Android中寻找将采用输入(text,text_font_size,device_width)的方法,并根据这些计算,它将返回显示特定文本所需的高度?

我正在根据他的内容设置文本视图/ webview高度运行时,我知道warp内容但我不能在我的情况下使用因为一些web视图最小高度问题.

所以我试图计算高度,并根据我设置视图高度.

我尝试过以下方法

Paint paint = new Paint();
paint.setTextSize(text.length()); 
Rect bounds = new Rect();
paint.getTextBounds(text, 0, 1, bounds);
mTextViewHeight= bounds.height();
Run Code Online (Sandbox Code Playgroud)

所以输出是

1)"Hello World"返回字体15的高度13

2)"Jelly Bean的最新版本在这里,性能优化"返回字体15的高度16

然后我试过了

Paint paint = new Paint();
paint.setTextSize(15);
paint.setTypeface(Typeface.SANS_SERIF);
paint.setColor(Color.BLACK);

Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), result);

Paint.FontMetrics metrics = brush.getFontMetrics();
int totalHeight = (int) (metrics.descent - metrics.ascent + metrics.leading);
Run Code Online (Sandbox Code Playgroud)

所以输出是

1)"Hello World"返回字体15的高度17

2)"最新版本的Jelly Bean在这里,性能优化"返回字体15的高度17

如果我将这些值设置为我的视图然后剪切一些文本,它不会显示所有内容.

在某些桌子上它看起来还不错,因为它有很大的宽度而不是在手机上.

有没有办法根据内容计算高度?

android textview android-layout android-canvas android-view

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

裁剪方形图像到圆圈 - 以编程方式

我正在寻找过去的一天,但我没有成功.

我从API获取图像,然后使用以下代码将其下载到位图文件.

private Bitmap DownloadImage(String URL) 
    {
        Bitmap bitmap = null;
        InputStream in = null;
        try 
        {
            in = OpenHttpConnection(URL);
            bitmap = BitmapFactory.decodeStream(in);
            in.close();
        }
        catch (IOException e1) 
        {
            e1.printStackTrace();
        }
        return bitmap;
    }

    private InputStream OpenHttpConnection(String urlString) throws IOException 
    {
        InputStream in = null;
        int response = -1;

        URL url = new URL(urlString);
        URLConnection conn = url.openConnection();

        if (!(conn instanceof HttpURLConnection))
            throw new IOException("Not an HTTP connection");

        try 
        {
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.connect();

            response …
Run Code Online (Sandbox Code Playgroud)

android image crop android-canvas

21
推荐指数
3
解决办法
5万
查看次数

在android中创建可绘制和可缩放的图像视图

目标:

创建可绘制和可缩放的imageview,

这意味着当我按下按钮时,它是可绘制的,

或者当我关闭时,这是可缩放的.

*请注意,图纸应与图像视图一起变焦

================================================== =============

最近我写了一个像这样的自定义可绘制图像视图:

 public class DrawView extends ImageView {

        private int color = Color.BLACK;
        private float width = 4f;
        private List<Holder> holderList = new ArrayList<Holder>();

        private class Holder {      
            Path path;
            Paint paint;

            Holder(int color, float width) {
                path = new Path();
                paint = new Paint();
                paint.setAntiAlias(true);
                paint.setStrokeWidth(width);
                paint.setColor(color);
                paint.setStyle(Paint.Style.STROKE);
                paint.setStrokeJoin(Paint.Join.ROUND);
                paint.setStrokeCap(Paint.Cap.ROUND);
            }
        }

        public DrawView(Context context) {
            super(context);
            init();
        }

        public DrawView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }

        public DrawView(Context context, AttributeSet …
Run Code Online (Sandbox Code Playgroud)

android android-imageview android-canvas android-view android-drawable

21
推荐指数
1
解决办法
3476
查看次数

贝塞尔曲线和画布

如何在画布中绘制贝塞尔曲线.我只有起点和终点.我想从起点到终点画线.我怎么能这样做?

android android-canvas

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

如何在Android Canvas上绘制填充三角形

我有扩展View类的MyView类.MyView应绘制填充三角形.我画了一个三角形,但我不能把它填满.这是我的onDraw()方法:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint paint = new Paint();

    paint.setColor(android.graphics.Color.BLACK);
    canvas.drawPaint(paint);

    paint.setStrokeWidth(4);
    paint.setColor(android.graphics.Color.RED);
    paint.setStyle(Paint.Style.FILL_AND_STROKE);
    paint.setAntiAlias(true);

    Point a = new Point(0, 0);
    Point b = new Point(0, 100);
    Point c = new Point(87, 50);

    Path path = new Path();
    path.setFillType(FillType.EVEN_ODD);
    path.moveTo(a.x, a.y);
    path.lineTo(b.x, b.y);
    path.moveTo(b.x, b.y);
    path.lineTo(c.x, c.y);
    path.moveTo(c.x, c.y);
    path.lineTo(a.x, a.y);
    path.close();

    canvas.drawPath(path, paint);
}
Run Code Online (Sandbox Code Playgroud)

这就是我得到的结果:

在此输入图像描述

android shape android-canvas

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

查看外部边界未正确绘制

点击自定义条形图(使用MPAndroidChart创建)后,我正在绘制工具提示.视图层次结构如下

<LinearLayout>
     <TextView text=Move & Max Pain/>
     <RelativeLayout with 2 textviews>
     <chart
       clipToChildren=false
       clipToPadding=false
     />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

虽然View位于Chart或其中间兄弟中,但外观看起来很好.但是当它与它的兄弟碰撞时,工具提示被截断了

在此输入图像描述

使用HierarchyViewer我可以看到内容存在,但它没有被绘制.

为了获得剪辑,我在draw中使用了这个代码

    @Override
  public void draw(Canvas canvas, float posx, float posy) {
    // take offsets into consideration
    posx += getXOffset();
    posy += getYOffset();

    canvas.save();

    // translate to the correct position and draw
    canvas.translate(posx, posy);

    Rect clipBounds = canvas.getClipBounds();
    clipBounds.inset(0, -getHeight());
    canvas.clipRect(clipBounds, Region.Op.INTERSECT);

    draw(canvas);
    canvas.translate(-posx, -posy);

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

如果我将Op更改为Region.Op.Replace,则工具提示会正确绘制,但它会替换工具栏内容,而不是在其下滚动.

在此输入图像描述

android android-custom-view android-canvas mpandroidchart

20
推荐指数
1
解决办法
1544
查看次数