自定義屬性控制佈局,用於展示自定義View的各種屬性

效果圖這樣:

上面是要展示屬性的自定義View,下面的佈局就是我自己寫的屬性控制佈局,添加各類控件組都只需要一行代碼,像這樣:

acl.addSeekBar("寬度", 20, 80, 300, value -> btn2.setWidth(value))
                .addSeekBar("高度", 10, 20, 60, value -> btn2.setHeight(value))
                .addSeekBar("邊框寬度", 0, 1, 5, value -> changeStrokeWidth(value))
                .addSeekBar("Radius", 0, 15, 30, value -> btn2.setRadius(value))
                .addRadioGroup("背景顏色", new String[]{"Normal", "Pressed", "Disable"}, -1, position -> {
                    state = position;
                    currAdjustAttribute = "BackgroundColor";
                })
                .addRadioGroup("邊框顏色", new String[]{"Normal", "Pressed", "Disable"}, -1, position -> {
                    state = position;
                    currAdjustAttribute = "StrokeColor";
                })
                .addRadioGroup("文字顏色", new String[]{"Normal", "Pressed", "Disable"}, -1, position -> {
                    state = position;
                    currAdjustAttribute = "TextColor";
                })
                .addCheckBoxGroup("使能", new String[]{"Enable/Disable"}, new int[]{0}, false, (position, state) -> {
                    btn2.setEnabled(state);
                    isEnable = !isEnable;
                })
                .addColorSeekBar("顏色", color -> {
                    switch (currAdjustAttribute) {
                        case "BackgroundColor":
                            if (state == 0)
                                btn2.setNormalBackgroundColor(color);
                            else if (state == 1)
                                btn2.setPressedBackgroundColor(color);
                            else if (state == 2)
                                btn2.setUnableBackgroundColor(color);
                            break;
                        case "StrokeColor":
                            if (state == 0)
                                btn2.setNormalStrokeColor(color);
                            else if (state == 1)
                                btn2.setPressedStrokeColor(color);
                            else if (state == 2)
                                btn2.setUnableStrokeColor(color);
                            break;
                        case "TextColor":
                            if (state == 0)
                                btn2.setNormalTextColor(color);
                            else if (state == 1)
                                btn2.setPressedTextColor(color);
                            else if (state == 2)
                                btn2.setUnableTextColor(color);
                            break;
                    }
                });

實際應用的時候,把監聽處理封裝成函數調用,結構就會很清晰.目前只有CheckBox,RadioButton,SeekBar,ColorSeekBar,Spinner這些控件可以添加,日後如有需求,可以仿照着添加新的控件.

這個調節顏色的SeekBar實現比較複雜,我就不加到源碼文件中了,你如果知道有輕量級的實現,請留言.

源碼在這兒,1分混口飯吃.

發佈了41 篇原創文章 · 獲贊 14 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章