Android 輕量級的折線圖項目 - CurveView

個人博客地址: 斯科特安的時間

CurveView 是一個輕量級、可高度定制化的折線圖項目。

效果演示

顯示全部 滾動支持
顯示全部
滾動支持

特點

  • 支持樣式定制
  • 使用 adapter 方式集成數(shù)據(jù),用法簡單,極易理解
  • 支持點上 8 個方向同時添加文字
  • 支持顯示全部長度或手動拖動

用法

1. 導(dǎo)入依賴

在項目build.gradle中添加:

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}

添加依賴

dependencies {
        compile 'com.github.auv1107:CurveView:a0e576c041'
}

2. 添加 CurveView

<com.sctdroid.app.uikit.CurveView
    android:id="@+id/curve_view"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    app:backgroundColor="#16b7df"
    app:corner="1px"
    app:contentPaddingStart="40dp"
    app:contentPaddingEnd="40dp"
    app:contentPaddingBottom="20dp"
    app:contentPaddingTop="20dp"
    app:strokeWidth="1px"
    app:showXLine="false"
    app:showXText="true"
    app:contentColor="@android:color/white"
    app:dotTextColor="@android:color/white"
    app:dotTextSize="8sp"
    app:axisTextSize="9sp"
    app:axisTextColor="@android:color/white"
    app:dotTextGravity="center_horizontal|bottom"
    app:showAll="true"
    app:unitWidth="100dp"
    />

屬性說明

屬性 類型 說明
backgroundColor color 背景色,暫只支持顏色背景
corner dimension 折線平滑度,0 為尖銳的折線,越大越平滑
contentPaddingStart dimension 左(開始點)內(nèi)容邊距
contentPaddingEnd dimension 右(結(jié)束點)內(nèi)容邊距
contentPaddingBottom dimension 下內(nèi)容邊距
contentPaddingTop dimension 上內(nèi)容邊距
strokeWidth dimension 折線寬度
showXLine boolean 是否繪制 x 軸
showXText String 是否顯示 x 軸文字
contentColor color 折線和坐標(biāo)軸顏色
dotTextColor color 點標(biāo)記文字顏色
dotTextSize dimension 點標(biāo)記文字尺寸
axisTextSize dimension 坐標(biāo)軸文字尺寸
axisTextColor color 坐標(biāo)軸文字顏色
showAll boolean 是否顯示所有點。true,顯示所有點。false,每格寬度由 unitWidth 指定,支持手指拖動
unitWidth dimension x 軸上相鄰兩點寬度,僅在 showAllfalse 時有效

3. 添加 Adapter

CurveView curveView = (CurveView) findViewById(R.id.curve_view);
curveView.setAdapter(new CurveView.Adapter() {

    String text = "吾生也有涯,而知也無涯";

    /**
     * @return 點的數(shù)量
     */
    @Override
    public int getCount() {
        return 7;
    }

    /**
     * level 是 y 軸高度,在 minLevel 和 maxLevel 之間
     * @param position
     * @return 返回當(dāng)前 position 的 level
     */
    @Override
    public int getLevel(int position) {
        return (int) (15 + (Math.random() * 20));
    }

    /**
     * @return y 軸下限
     */
    @Override
    public int getMinLevel() {
        return 15;
    }

    /**
     * @return y 軸上限
     */
    @Override
    public int getMaxLevel() {
        return 35;
    }

    /**
     * 設(shè)置點上的文字,每個mark是一個,可同時設(shè)置點的 8 個方向的文字
     * 注意: Gravity 應(yīng)使用 CurveView.Gravity 類
     *
     * @param position
     * @return
     */
    @Override
    public Set<CurveView.Mark> onCreateMarks(int position) {
        Set<CurveView.Mark> marks = new HashSet<CurveView.Mark>();
        CurveView.Mark mark = new CurveView.Mark(getLevel(position) + "°", Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 20, 0, 0);
        CurveView.Mark mark1 = new CurveView.Mark(getLevel(position) + "°", Gravity.START | Gravity.CENTER_HORIZONTAL, 0, 0, 0, 20);
        marks.add(mark);
        marks.add(mark1);
        return marks;
    }

    /**
     * 獲取第 i 個點 x 軸上的文字
     * @param i
     * @return
     */
    @Override
    public String getXAxisText(int i) {
        return text.substring(i, i + 1);
    }
});

項目地址: 輕量級、可高度定制化的折線圖]

2017.6.15
斯科特安

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容