2015年9月9日 星期三

Android-設定更換背景漸層顏色( Change BackgroundColor Gradient)

常常有人問背景只能設定單一色調嗎?
答案是否定的
以下有 Sample 提供各位參考
首先在 drawable 底下創立相關文件

















Gradient 漸層
startColor : 起始顏色
centerColor : 中間顏色
endColor : 結束顏色
angle : 頭尾( 建議 45 度為單位 )
( EX : 90 : 下到上 )


gradient_1.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFFFF"
        android:endColor="#55AA00"
        android:angle="90"/>    
</shape>

gradient_2.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
    <gradient android:startColor="#0000FF" 
              android:centerColor="#CCDDFF"
              android:endColor="#0000FF" 
              android:angle="-90" />
</shape>

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout_background"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/gradient_1"
    >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
   
</LinearLayout>

MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements OnClickListener{

    private LinearLayout linear_background;
    private Button btn01;
    private Button btn02;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        linear_background = (LinearLayout)findViewById(R.id.linearLayout_background);
        btn01 = (Button)findViewById(R.id.button1);
        btn02 = (Button)findViewById(R.id.button2);
        
        btn01.setOnClickListener(this);
        btn02.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch(view.getId()){
        
        case R.id.button1:
            linear_background.setBackgroundResource(R.drawable.gradient_1);
            
            break;
            
        case R.id.button2:
            linear_background.setBackgroundResource(R.drawable.gradient_2);
            
            break;
        }
    }
}

有朋友說為什麼不用
1 . BackgroundDrawable - 不建議使用
2 . Background - 最低版本為 : API 16
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) 
{
    linear_background.setBackgroundDrawable( getResources().getDrawable(R.drawable.gradient_1) );
} 
else 
{
    linear_background.setBackground( getResources().getDrawable(R.drawable.gradient_1));
}
參考連結 : Android中使用setBackgroundDrawable错误提示

------------------------------------------------
完成圖 :
gradient_1


gradient_2
























如果有關顏色內容不了解,請參考以下 :
參考資訊 : Android中shape的使用
參考資訊 : Android Debelopers-Drawable Resources
歡迎轉載,請註明出處。

沒有留言:

張貼留言