当前位置: 首页 > 知识库问答 >
问题:

Android Canvas:创建RoundRectShape对象

章飞章
2023-03-14

我为矩形形状创建了一个类,因为它是应用程序中的对象。但是现在我希望角落是圆的。在下面你可以看到它是一个裸骨类,可以创建我想要的具有相同属性的尽可能多的矩形。

public class customDrawable extends ShapeDrawable {

    public void setCustomDrawableAttributes(ShapeDrawable shapeDrawable){
       int x = 0;
       int y = 0;
       int width = 100;
       int height = 100;
       shapeDrawable.setBounds(x, y-height, x + width,y+height );
   }

   public ShapeDrawable createShape(){
       return new ShapeDrawable(new RectShape());
   }

}

更新:没有这个方法,我什么也画不出来,因为没有尺寸。用它只能画出普通的矩形。(更改后的整数值不显示应用程序特定的方法)

public void setDrawableAttributes(ShapeDrawable shapeDrawable){
   int x = 0;
   int y = 500
   int width = 200
   int height = 300
   shapeDrawable.setBounds(x, y-height, x + width,y+height );

}

从我的研究中,我发现我不能简单地添加圆角,而是必须创建一个< code > RoundRectShape shapeDrawable 。我用这个< code>RoundRectShape创建圆角矩形的每一次尝试都失败了。不知何故,这个形状最终总是一个没有圆角的规则矩形。

我正在寻找一个简单的类(就像提供的那样),它可以创建一个roundRectShape绘图。高度和宽度并不重要,只要它有圆角。必须是Java而不是XML。

我尝试过创建圆形矩形的链接:

1.https://developer.android.com/reference/android/graphics/drawable/shapes/RoundRectShape.html

2.http://alvinalexander.com/java/jwarehouse/android/graphics/java/android/graphics/drawable/shapes/RoundRectShape.java.shtml

3.https://www.codota.com/android/scenarios/52c5d269da0a37e1836d6e75/android.graphics.drawable.shapes.RoundRectShape?tag=coyote

4.http://developer.oesf.biz/em/developer/reference/durian/android/graphics/drawable/shapes/RoundRectShape.html

5.https://android.googlesource.com/platform/frameworks/base//donut release/graphics/java/android/graphies/drawable/shapes/RoundRectShape.java

6.Android:圆形矩形:html" target="_blank">修改角半径

7 . http://www . program creek . com/Java-API-examples/index . PHP?API = Android . graphics . drawable . shapes . roundrectshape

9.//程序讨论.com//api-use-examples/android.graphics.可绘制.形状

共有3个答案

宋飞掣
2023-03-14

为什么不使用Canvas类的draRoundRect函数?公共类RoundRect{int l, r, t, b, rx, ry;油漆油漆;

    public RoundRect(int l,int r,int t,int b,int rx,int ry,Paint paint){
        this.l=l;
        this.r=r;
        this.t=t;
        this.b=b;
        this.paint=paint;
    }
    public void draw(Canvas c,Paint paint){ 
        c.drawRoundRect(l,t,r,b,rx,ry,paint);
    }
}`
终弘厚
2023-03-14

自定义绘图

您可以通过扩展drawable类来创建自定义drawable

创建自定义绘图的步骤

1.SubclassDrawable和实现以下方法方法

    < Li > < code > public void draw(@ NonNull Canvas Canvas)-您将获得一个画布对象来绘制形状。在这里调用getBounds()方法,根据我们应用drawable的视图获取尺寸。 < Li > < code > public void set Alpha(@ in transge(from = 0,to = 255) int alpha) -您将在此处获得一个alpha整数值,将其设置为您正在绘制形状的主绘图。 < Li > < code > public void setColorFilter(@ Nullable ColorFilter ColorFilter)-您将在此处获得ColorFilter对象,将其设置为您正在绘制形状的主绘图。 < Li > < code > public int getOpacity()-在此处返回不透明度值,如PixelFormat。半透明,像素格式。透明,像素格式。RGB_888等。

2.在< code>onDraw()中调用canvas.drawRoundRect()方法来绘制形状

>

  • 公共无效drawRoundRect(@android.support.annotation.NonNullandroid.graphics.RectFrect,浮动rx,浮动ry,@android.support.annotation.NonNullandroid.graphics.Paint油漆)

    使用指定的油漆绘制指定的圆角矩形。roundrect将根据绘画中的样式进行填充或加框。

    参数:

    1) rect -要绘制的圆角矩形的矩形边界2) rx -用于圆角的椭圆的x -半径3) ry -用于圆角的椭圆的y -半径4) paint -用于绘制圆角矩形的颜料

    代码示例

    import android.graphics.Canvas;
    import android.graphics.ColorFilter;
    import android.graphics.Paint;
    import android.graphics.PixelFormat;
    import android.graphics.Rect;
    import android.graphics.RectF;
    import android.graphics.drawable.Drawable;
    import android.support.annotation.IntRange;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    
    /**
     * Created by jinesh on 24/5/17.
     */
    
    public class RoundedRectangle extends Drawable {
        private Paint rectPaint;
        private RectF drawableBounds;
        public RoundedRectangle(int rectBackground) {
            rectPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
            rectPaint.setColor(rectBackground);
            drawableBounds=new RectF();
        }
    
        @Override
        public void draw(@NonNull Canvas canvas) {
            Rect bounds=getBounds();
            drawableBounds.set(bounds.left,bounds.top,bounds.right,bounds.bottom);
            canvas.drawRoundRect(drawableBounds,10,10,rectPaint);
        }
    
        @Override
        public void setAlpha(@IntRange(from = 0, to = 255) int alpha) {
           rectPaint.setAlpha(alpha);
        }
    
        @Override
        public void setColorFilter(@Nullable ColorFilter colorFilter) {
           rectPaint.setColorFilter(colorFilter);
        }
    
        @Override
        public int getOpacity() {
            return PixelFormat.TRANSLUCENT;
        }
    }
    

    设置为活动中的任何视图

     RoundedRectangle roundedRectangle=new RoundedRectangle(ContextCompat.getColor(this,R.color.colorAccent));
     textView.setBackground(roundedRectangle);
    

    截图:

  • 赵智勇
    2023-03-14

    我已经创建了一个类< code>MyRect,用于为您绘制圆角矩形。

    public class MyRect {
    
        public static Paint paint;  // default paint use for all my MyRect objects
    
        static {
    
            paint=new Paint();
            paint.setColor(Color.RED);
        }
    
        public float x,y,width,height;
        public float roundStrength=30;
    
        public MyRect(float x, float y, float width,float height){
            this.x=x;
            this.y=y;
            this.width=width;
            this.height=height;
        }
    
        public MyRect(float x, float y, float width,float height,float roundStrength){
            this(x,y,width,height);
            this.roundStrength=roundStrength;
        }
    
        public void draw(Canvas canvas){
             canvas.drawRoundRect(x-width/2,y-height/2,x+width/2,y+height/2,roundStrength,roundStrength,paint);
        }
    }
    

    创建以上< code>MyRect的对象是不够的,我们需要在任何容器中保存对象的引用,以便我们可以在将来修改或删除该对象。

    static ArrayList<MyRect> myRects=new ArrayList<>(); 
    

    视图/SurfaceViewonDraw(Canvas画布)方法中调用MyRect的绘制()方法。

    for(MyRect rect:myRects)
        rect.draw(canvas);
    

    完成,创建对象并添加到容器。

    myRects.add(new MyRect(touchx,touchy,100,100)); 
    

    myRects.add(new MyRect(touchx,touchy,100,100,50)); 
    

    您还可以扩展MyRect,例如根据您的要求添加更多构造函数、方法和数据成员。

     类似资料:
    • JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。 当我们用obj.xxx访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype对象,最后,如果还没有找到,就只能返回undefined。 例如,创建一个Array对象: var arr = [1, 2, 3]; 其

    • 问题内容: 如何使用Google Gson创建json对象?以下代码创建一个看起来像的json对象 如何创建像这样的jSon对象? 问题答案: 弄清楚了如何使用Java对象正确执行此操作。 Creator java类的实现。

    • 问题内容: 我正在尝试学习python,现在我试图摆脱类的困扰,以及如何使用实例操作它们。 我似乎无法理解这个练习问题: 创建并返回其名称,年龄和专业与输入的对象相同的学生对象 我只是不明白对象的含义,是否意味着我应该在包含这些值的函数内创建一个数组?或创建一个类,然后将该函数放入其中并分配实例?(在问这个问题之前,我被要求开设一个学生班,里面要写姓名,年龄和专业) 问题答案: 请注意,即使Pyt

    • 当我创建GET响应时,出现了Stackoveflow错误 应答控制器 他用AjaxResponseBody类作为答案 当这个控制器工作时,我捕捉到 我是如何理解这种情况的,因为模型用户和模型项目彼此有链接。模型用户有一个可选字段“监视的项目”。 并且模型项目具有字段,而不是empriy字段“author”: 我怎么能放弃它?还是其他方式?

    • 虽然Object 构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码。为解决这个问题,人们开始使用工厂模式的一种变体。 6.2.1 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现)。考虑到在ECMAScript 中无法创建类

    • 3D 效果使您可以从二维 (2D) 图稿创建三维 (3D) 对象。您可以通过高光、阴影、旋转及其他属性来控制 3D 对象的外观。您还可以将图稿贴到 3D 对象中的每一个表面上。 有两种创建 3D 对象的方法:通过凸出或通过绕转。另外,还可以在三维空间中旋转 2D 或 3D 对象。要应用或修改现有 3D 对象的 3D 效果,请选择该对象,然后在 “外观 ”面板中双击该效果。 注:3D 对象在屏幕上可