android - 查看带有切角和边框的背景

标签 android android-shape

我正在尝试制作一个具有这样背景的 Android View :
enter image description here

我发现最简单的方法是将两个具有不同背景颜色的形状叠加在一起:

enter image description here

每个元素的高度都不同,所以我需要在代码中制作形状。
起初我已经开始在 xml 中快速查看结果。我使用了 this post 中的原则开始,但我并没有真正接近任何有用的东西:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="-60%"
            android:pivotY="50%" >
            <shape
                android:shape="rectangle">
                <solid
                    android:color="#FF00FF" />
            </shape>
        </rotate>
    </item>
</layer-list>


我应该怎么做?
任何方向的线索都会被应用



我在 iOS 中是这样完成的,但形状在 Android 中的工作方式不同:

self.view.backgroundColor = [self getEventColor];
CALayer *backgroundLayer = self.view.layer;

CAShapeLayer *mask = CAShapeLayer.new;
mask.frame = backgroundLayer.bounds;
mask.fillColor = [[UIColor blackColor] CGColor];

CGFloat width = backgroundLayer.frame.size.width;
CGFloat height = backgroundLayer.frame.size.height;

CGMutablePathRef path = CGPathCreateMutable();

int cornerCutSize = 20;
if (cornerCutSize > height)
    cornerCutSize = (int) height - 5;
CGPathMoveToPoint(path, NULL, 0, 0);
CGPathAddLineToPoint(path, nil, width, 0);
CGPathAddLineToPoint(path, nil, width, height - cornerCutSize);
CGPathAddLineToPoint(path, nil, width - cornerCutSize, height);
CGPathAddLineToPoint(path, nil, width, height);
CGPathAddLineToPoint(path, nil, 0, height);
CGPathAddLineToPoint(path, nil, 0, 0);
CGPathCloseSubpath(path);

mask.path = path;
CGPathRelease(path);

backgroundLayer.mask = mask;

UIColor *shadowColor = [[UIColor blackColor] colorWithAlphaComponent:0.12];
self.topView.backgroundColor = shadowColor;

//add border
CAShapeLayer *border = [CAShapeLayer new];
border.frame = backgroundLayer.bounds;
border.path = path;
border.lineWidth = ProgramItemBorderSize;
border.strokeColor = shadowColor.CGColor;
border.fillColor = nil;
[backgroundLayer addSublayer:border];

最佳答案

如果您只需要处理不同的高度,请将其设为 9 patch drawable。查看开发人员指南:http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch http://developer.android.com/tools/help/draw9patch.html

如果您想要更接近您的 iOS 代码的东西,您可以使用路径并绘制到 Canvas 上。 例如,您可以创建自定义可绘制对象来执行此操作:

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.Drawable;

public class PathDrawable extends Drawable {

    Path mPath = new Path();
    Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

    public PathDrawable(){
        mPaint.setColor(Color.GRAY);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mPaint.setStrokeWidth(5);
    }

    @Override
    public void draw(Canvas canvas) {
        mPath.moveTo(10,10);
        mPath.lineTo(10, canvas.getHeight()-10);
        mPath.lineTo(canvas.getWidth()-50, canvas.getHeight()-10);
        mPath.lineTo(canvas.getWidth()-10, canvas.getHeight()-50);
        mPath.lineTo(canvas.getWidth()-10, 10);
        mPath.close();
        canvas.drawPath(mPath, mPaint);

    }

    @Override
    public void setAlpha(int i) {}

    @Override
    public void setColorFilter(ColorFilter colorFilter) {}

    @Override
    public int getOpacity() {
        return 0;
    }


}

这里我只画了其中一个形状,但你应该明白了。

关于android - 查看带有切角和边框的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23618136/

相关文章:

android - ListView 示例在结果 View 中复制联系人

android - 将 build.gradle 值设置为写入 xml 文件的值

android - Gmail 5.0 应用程序在收到 ACTION_SEND Intent 时失败并显示 "Permission denied for the attachment"

android - 形状虚线,破折号不起作用

android - 如何制作左上圆角和左下圆角的形状?

android - 如何在图层列表中制作阴影?

android - 我无法使用小米红米 4x 启动 Appium

java - android 中的 speex 支持

android - 在android中以编程方式改变形状颜色

android - 如何为android形状绘制梯形?