2016年7月7日 星期四

[Android]修改Shape裡的solid顏色

當我們有多種顏色需要切換時,卻遇上有圓角的背景。


其實我們只需要動態修改Shape裡的solid顏色,就可以達成目標。


首先拉好一個有圓角的背景 background_drawer.xml 放在drawable資料夾下


<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="4dp" />
    <solid android:color="@android:color/white"/>
</shape>

它預設是白色帶圓角的方型。

接下來我們拉一個layout  , activity_main.xml

<?xml version="1.0a<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="come.test.MainActivity">

    <ImageView
        android:id="@+id/img"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:background="@drawable/background_drawer" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal"
        android:layout_marginTop="30dp"
        >
        <Button
            android:id="@+id/black"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:background="@android:color/black"

            />
        <Button
            android:id="@+id/red"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:background="@android:color/holo_red_light"

            />

        <Button
            android:id="@+id/green"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:background="@android:color/holo_green_light"
            />

        <Button
            android:id="@+id/blue"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:background="@android:color/holo_blue_bright"

            />
        <Button
            android:id="@+id/white"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:background="@android:color/white"

            />
    </LinearLayout>
</LinearLayout>

這個layout中有1個ImageView和5個Button 用來示範切換顏色用,畫面如下。











































接下來寫程式來切換


package come.test;

import android.graphics.drawable.GradientDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener
{
    //宣告物件
    private Button blue;
    private Button green;
    private Button white;
    private Button red;
    private Button black;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化物件
        blue=(Button)findViewById(R.id.blue);
        green=(Button)findViewById(R.id.green);
        white=(Button)findViewById(R.id.white);
        red=(Button)findViewById(R.id.red);
        black=(Button)findViewById(R.id.black);

        imageView=(ImageView)findViewById(R.id.img);
        //設定事件監聽
        blue.setOnClickListener(this);
        green.setOnClickListener(this);
        white.setOnClickListener(this);
        red.setOnClickListener(this);
        black.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        int color=0;
        //判斷是那個Button被按下,然候取得指定的顏色
        if (v.getId()==blue.getId())
        {
            color=getResources().getColor(android.R.color.holo_blue_bright);
        }
        else if (v.getId()==white.getId())
        {
            color=getResources().getColor(android.R.color.white);
        }
        else if (v.getId()==green.getId())
        {
            color=getResources().getColor(android.R.color.holo_green_light);
        }
        else if (v.getId()==red.getId())
        {
            color=getResources().getColor(android.R.color.holo_red_light);
        }
        else if (v.getId()==black.getId())
        {
            color=getResources().getColor(android.R.color.black);
        }
        //取出ImageView的背景Drawable物件
        GradientDrawable drawable =(GradientDrawable)imageView.getBackground();
        //設定Drawable的顏色
        drawable.setColor(color);
    }
}

執行畫面

沒有留言:

張貼留言