如何在安卓系统中构建梯形形状?

13
如何创建一个如下图所示的梯形形状?

enter image description here

我不想使用图像或9.png文件。

1
使用带有自定义形状的std ShapeDrawable。 - pskink
使用矢量图形:请参见下面的答案。 - Suhayl SH
请查看此答案 - Burak Cakir
Android Drawables 的官方文档在这里:https://developer.android.com/guide/topics/graphics/2d-graphics.html - user1506104
Android高性能图形文档在这里:https://developer.android.com/guide/topics/graphics/opengl.html - user1506104
这篇文章对我在创建梯形视图方面帮助很大。 https://arkapp.medium.com/trapezium-view-for-android-584799c7e849在这篇文章的帮助下,我成功地创建了一个自定义视图,其中一条边是斜坡。 - abdul rehman
3个回答

17

试一试:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="292dp"
    android:height="172dp"
    android:viewportWidth="292"
    android:viewportHeight="172">

    <path
        android:strokeWidth="1.5"
        android:strokeMiterLimit="10"
        android:pathData="M 27.046 96.615 L 16.416 150.396 L 271.534 150.396 L 186.495 22.836 L 37.676 22.836 L 27.046 86.615 Z" />

    <path
        android:fillColor="#00ff00"
        android:strokeWidth="1.5"
        android:strokeMiterLimit="10"
        android:pathData="M 16.046 20.615 L 13.416 150.396 L 271.534 150.396 L 186.495 22.836 L 37.676 22.836 L 16.046 23.615 Z " />
</vector>

输入图像描述


我推荐这个答案。在这里查看我的答案,其中包含文档链接和一个示例,可以更好地了解如何使用它。 - Gary99
我希望有人能够解释如何绘制这种矢量形状。 - AkshayT

5

这个类是一个View,它定义并绘制了一个梯形ShapeDrawable。因此,作为一个Drawable,这个梯形可以用作背景。

package com.stackoverflow.questions.q25768037;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.PathShape;
import android.util.AttributeSet;
import android.view.View;

public class TrapezoidView extends View {

    private ShapeDrawable mTrapezoid;

    public TrapezoidView(Context context, AttributeSet attrs) {
        super(context, attrs);

        Path path = new Path();
        path.moveTo(0.0f, 0.0f);
        path.lineTo(100.0f, 0.0f);
        path.lineTo(200.0f, 100.0f);
        path.lineTo(0.0f, 100.0f);
        path.lineTo(0.0f, 0.0f);

        mTrapezoid = new ShapeDrawable(new PathShape(path, 200.0f, 100.0f));
        mTrapezoid.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
        mTrapezoid.getPaint().setStrokeWidth(1.0f);
        mTrapezoid.getPaint().setColor(Color.GREEN);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        mTrapezoid.setBounds(0, 0, w, h);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        mTrapezoid.draw(canvas);
    }
}

第一眼看起来好多了。希望这是一个比被接受的解决方案更好的方案。 - Shubham AgaRwal

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接