Android蛛網評分控件:SpiderWebScoreView

jopen 8年前發布 | 14K 次閱讀 Android開發 移動開發

SpiderWebScoreView是用于Android上的一個蛛網評分控件

使用說明:

Features

  • 支持任意個角以及任意層級

  • 蛛網圖形外邊的分數文案支持任意樣式

  • 不管是多少維度都可左右對稱

1. 倒入 SpiderWebScoreView

添加 gradle dependency

dependencies{
    compile 'me.xiaopan:spiderwebscoreview:lastVersionName'
}

lastVersionName是最新版本名稱的意思,你可以在release頁面看到最新的版本名稱

最低支持Android2.2

2. 在布局中使用

首先在布局中使用聲明SpiderWebScoreView和CircularLayout

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:clipChildren="false">

    <me.xiaopan.swsv.SpiderWebScoreView
        android:id="@+id/spiderWeb_mainActivity_1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center" />

    <me.xiaopan.swsv.CircularLayout
        android:id="@+id/layout_mainActivity_circular1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:clipChildren="false"/>
</FrameLayout>

詳解:

  • SpiderWebScoreView用來顯示蛛網圖形

  • CircularLayout用來顯示四周的文案

  • CircularLayout的尺寸必須和SpiderWebScoreView一致并且是層疊關系

  • CircularLayout的子View將會顯示在圓圈的外面,因此CircularLayout和其父FrameLayout都必須設置clipChildren為false

  • 父FrameLayout還要比CircularLayout大一圈,大的這一圈就是用來顯示CircularLayout的子View,具體大多少視你的需求而定

3. Run time settings

然后在代碼中通過SpiderWebScoreView.setScores(float maxScore, float[] scores)方法設置最大分數以及所有分值即可

  • 有多少個分值(scores.length)蛛網圖形就有多少個角

  • 默認分5層

最后根據你的需求往CircularLayout里面添加顯示分數的View即可,數量和順序必須同scores相同

如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SpiderWebScoreView spiderWebScoreView1 = (SpiderWebScoreView) findViewById(R.id.spiderWeb_mainActivity_1);
    CircularLayout circularLayout1 = (CircularLayout) findViewById(R.id.layout_mainActivity_circular1);

    Score[] scores = new Score[]{
        new Score(7.0f, R.drawable.vip_icon7),
        new Score(8.0f, R.drawable.vip_icon8),
        new Score(5.0f, R.drawable.vip_icon5),
        new Score(5.0f, R.drawable.vip_icon5),
        new Score(8.0f, R.drawable.vip_icon8),
        new Score(7.0f, R.drawable.vip_icon7),
    };
    setup(spiderWebScoreView1, circularLayout1, scores);
}

private void setup(SpiderWebScoreView spiderWebScoreView, CircularLayout circularLayout, Score... scores){
    float[] scoreArray = new float[scores.length];
    for(int w = 0; w < scores.length; w++){
        scoreArray[w] = scores[w].score;
    }
    spiderWebScoreView.setScores(10f, scoreArray);

    circularLayout.removeAllViews();
    for(Score score : scores){
        TextView scoreTextView = (TextView) LayoutInflater.from(getBaseContext()).inflate(R.layout.score, circularLayout, false);
        scoreTextView.setText(score.score+"");
        if(score.iconId != 0){
            scoreTextView.setCompoundDrawablesWithIntrinsicBounds(0, 0, score.iconId, 0);
        }
        circularLayout.addView(scoreTextView);
    }
}

public static class Score{
    public float score;
    public int iconId;

    public Score(float score, int iconId) {
        this.score = score;
        this.iconId = iconId;
    }

    public Score(float score) {
        this.score = score;
    }
}

4. Attributes

SpiderWebScoreView

Name 介紹 對應方法 缺省值
angleCount 設置蛛網圖形有多少個角 會在setScores(float, float[])方法中根據scores的長度來覆蓋此參數 5
hierarchyCount 設置蛛網圖形有多少層 setHierarchyCount(int) 5
maxScore 最大分值 setScores(float, float[])方法的第一個參數就是maxScore 10f
lineColor 蛛網線條的顏色 setLineColor(int) 0xFF000000
lineWidth 蛛網線條的寬度 setLineWidth(float) -1(不設置,Paint默認寬度)
scoreColor 分數圖形的顏色 setScoreColor(int) 0x80F65801
scoreStrokeColor 分數圖形描邊的顏色 setScoreStrokeColor(int) 0xFFF65801
scoreStrokeWidth 分數圖形描邊的寬度 setScoreStrokeWidth(float) -1(不設置,Paint默認寬度)
disableScoreStroke 禁用分數圖形描邊 setDisableScoreStroke(boolean) false

CircularLayout

Name 介紹 對應方法 缺省值
spacing 設置子View與圓圈之間的距離 setSpacing(int) 8dp

更多示例請參考sample源碼


項目地址: https://github.com/xiaopansky/SpiderWebScoreView

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!