如何在android中创建圆形小部件,其颜色可以编程方式更改?

时间:2017-12-31 16:29:36

标签: android

有没有办法在Android中创建一个圆形按钮而不只是将可绘制的形状文件设置为背景?因为我想以编程方式设置按钮颜色,并将可绘制的形状文件设置为背景,所以它不起作用。我也使用了浮动操作按钮,但是当试图将颜色样本设置为背景时它没有用。

`public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    FloatingActionButton fab1, fab2, fab3, fab4, fab5,fab6;

    ImageView imgV;

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


        fab1 = (FloatingActionButton) findViewById(R.id.bt1);
        fab2 = (FloatingActionButton) findViewById(R.id.bt2);
        fab3 = (FloatingActionButton) findViewById(R.id.bt3);
        fab4 = (FloatingActionButton) findViewById(R.id.bt4);
        fab5 = (FloatingActionButton) findViewById(R.id.bt5);
        fab6 = (FloatingActionButton) findViewById(R.id.bt6);
        imgV = (ImageView) findViewById(R.id.imageView);

        fab1.setOnClickListener(this);
        fab2.setOnClickListener(this);
        fab3.setOnClickListener(this);
        fab4.setOnClickListener(this);
        fab5.setOnClickListener(this);


        Bitmap bitmap = ((BitmapDrawable) imgV.getDrawable()).getBitmap();
        if (bitmap != null) {

            Palette.from(bitmap).maximumColorCount(10).generate(new Palette.PaletteAsyncListener() {
                @Override
                public void onGenerated(Palette palette) {


                    setViewSwatch(fab1, palette.getVibrantSwatch(), "Vibrant");
                    setViewSwatch(fab2, palette.getDarkVibrantSwatch(), "Dark Vibrant");
                    setViewSwatch(fab3, palette.getLightVibrantSwatch(), "Light Vibrant");
                    setViewSwatch(fab4, palette.getMutedSwatch(), "Muted");
                    setViewSwatch(fab5, palette.getLightMutedSwatch(), "Light Muted");


                }


            });


        }

    }

    private void setViewSwatch(FloatingActionButton fab, Palette.Swatch vibrantSwatch, String vibrant) {
        if (vibrantSwatch != null) {
            fab.setBackgroundColor(vibrantSwatch.getRgb());



        }
    }
`

3 个答案:

答案 0 :(得分:0)

我们的朋友'markushi'为Android圆形按钮编写了这段代码,也许它可以帮到你 https://github.com/markushi/android-circlebutton

答案 1 :(得分:0)

如果您需要圆形按钮在两种颜色之间切换,这是最简单的解决方案: 创建两个新的Drawable XML文件,如d1和d2

d1.xml

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#000000(Required colours hex value here)" />   


    <corners android:radius="10dip" />

    <stroke
        android:width="1dp"
        android:color="@android:color/white" />

</shape>

将d1.xml的副本创建为d2.xml,然后只修改颜色值

在代码中,您可以按照以下方式以编程方式更改背景:

v.setBackgroundResource(R.drawable.d1);
v.setBackgroundResource(R.drawable.d2);

答案 2 :(得分:0)

我强烈建议您使用循环动作按钮,它可以轻松地以编程方式更改颜色

mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int))

Also here is link for more info 我认为你可能会通过实施完全相同结果的其他解决方案(方式)来浪费你的时间 希望这会有所帮助;)