【问题标题】:Represent Percentage Value (0-100) in Color (from Red to Green)以颜色(从红色到绿色)表示百分比值 (0-100)
【发布时间】:2012-10-30 13:48:45
【问题描述】:

我有一个动态更新百分比(0 到 100 之间)的 Android 应用。该应用程序有两种特定颜色 - 浅红色 (#BD4141) 和浅绿色 (#719D98)。

我希望元素在给定百分比为 0 时具有浅红色背景,在给定百分比为 100 时具有浅绿色背景。中间百分比应代表这两种颜色之间的柔和过渡颜色表示。

或者,我希望它从纯红色变为纯绿色。

【问题讨论】:

    标签: android colors


    【解决方案1】:

    这段代码没有经过优化,但它完成了它应该做的事情。

    public class MainActivity extends Activity {
    
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.screen_main);
    
            final SeekBar sb = (SeekBar) findViewById(R.id.seekBar);
            sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
                @Override
                public void onStopTrackingTouch(final SeekBar seekBar) {
                }
    
                @Override
                public void onStartTrackingTouch(final SeekBar seekBar) {
                }
    
                @Override
                public void onProgressChanged(final SeekBar seekBar,
                        final int progress, final boolean fromUser) {
                    update(seekBar);
                }
            });
            update(sb);
        }
    
        private void update(final SeekBar sb) {
            final RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout);
    
            final int colorStart = Color.parseColor("#BD4141");
            final int colorEnd = Color.parseColor("#719D98");
    
            layout.setBackgroundColor(interpolateColor(colorStart, colorEnd,
                    sb.getProgress() / 100f)); // assuming SeekBar max is 100
        }
    
        private float interpolate(final float a, final float b,
                final float proportion) {
            return (a + ((b - a) * proportion));
        }
    
        private int interpolateColor(final int a, final int b,
                final float proportion) {
            final float[] hsva = new float[3];
            final float[] hsvb = new float[3];
            Color.colorToHSV(a, hsva);
            Color.colorToHSV(b, hsvb);
            for (int i = 0; i < 3; i++) {
                hsvb[i] = interpolate(hsva[i], hsvb[i], proportion);
            }
            return Color.HSVToColor(hsvb);
        }
    
    }
    

    此答案基于来自android color between two colors, based on percentage? 的问答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-30
      • 2011-04-08
      • 2014-02-23
      • 2023-01-25
      • 1970-01-01
      • 2017-05-28
      • 2011-05-08
      • 2021-06-15
      相关资源
      最近更新 更多