Andorid 颜色渐变的实现
2014-11-24(一) by chenjia.me颜色渐变
今天看到一个软件清理~动态效果很不错,从黄色到绿色表示的是电脑垃圾减少的过程~
然后就想实现一个~
颜色渐变是有算法的,最开始想从16进制的000000加到ffffff发现是不对的。
//这是无意义的一行,防止subString出错========
简单得渐变应该是将色值拆开,成为这样:
int Red from 00 to (255)ff
int Blue from 00 to (255)ff
int Green from 00 to (255)ff
因此我们可以得到一个简单算法。
- 起始颜色比如#000000拆分为00 00 00,终点颜色为#FFFFFF拆开为FF FF FF
- 确定渐变的步数,为x
- 起始值减去终点值除以步数x就是每步我们要改变的数值
Android核心代码
开线程,修改bg的颜色色值
主要涉及:
- android的颜色转换
new Color().parseColor(color_str)
- android的多线程
- Java 10进制到16进制转换
Integer.toHexString()
- 进制转换的溢出和补0的操作
String return2(String str){ if(str.length()==1) return "0"+str; if(str.length()==0) return "00"+str; if(str.length()>2) return str.substring(str.length()-2,str.length()); return str; }
实现的核心代码
ImageView imageView;
Handler handler;
TextView textView;
int color=16777215;
private void initgreen() {
// TODO Auto-generated method stub
imageView=(ImageView)findViewById(R.id.imageView1);
imageView.setOnClickListener(MainActivity.this);
imageView.setBackgroundColor(new Color().BLACK);
textView=(TextView)findViewById(R.id.textView1);
handler=new Handler();
}
double r=255;
double g=0;
double b=255;
Runnable runnable = new Runnable() {
@Override
public void run() {
r=r-1;
g=g+0.5;
b=b-0.25;
String color_str;
color_str="#"+return2(Integer.toHexString((int)r))+return2(Integer.toHexString((int)g))+return2(Integer.toHexString((int)b));
Log.i("color", color_str);
imageView.setBackgroundColor(new Color().parseColor(color_str));
textView.setText(color_str);
if(r>=1)
handler.postDelayed(this, 19);
}
};
String return2(String str){
if(str.length()==1)
return "0"+str;
if(str.length()==0)
return "00"+str;
if(str.length()>2)
return str.substring(str.length()-2,str.length());
return str;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.imageView1){
r=255;
g=127;
b=64;
handler.postDelayed(runnable, 100);
}
}