其實我們只需要動態修改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); } }
執行畫面
沒有留言:
張貼留言