android将视图背景从一种颜色过渡到另一种颜色
我有一个透明的黑色背景视图:#DD000000 我想要的是,在某些情况下,视图从#223333FF转换回第一种颜色android将视图背景从一种颜色过渡到另一种颜色,android,transition,background-color,Android,Transition,Background Color,我有一个透明的黑色背景视图:#DD000000 我想要的是,在某些情况下,视图从#223333FF转换回第一种颜色 //lastApp.setBackgroundColor(getResources().getColor(R.color.semitransparent)); ColorDrawable[] color = {new ColorDrawable(Color.BLUE), new ColorDrawable(Color.BLACK)}; TransitionDrawable tran
//lastApp.setBackgroundColor(getResources().getColor(R.color.semitransparent));
ColorDrawable[] color = {new ColorDrawable(Color.BLUE), new ColorDrawable(Color.BLACK)};
TransitionDrawable trans = new TransitionDrawable(color);
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
lastApp.setBackgroundDrawable(trans);
} else {
lastApp.setBackground(trans);
}
trans.startTransition(300);
我的下一次尝试是在不使用alpha的情况下使用资源:#DD000000->#000000#223333FF->#3333FF
在这里,过渡起了作用,但这不是我想要的,因为没有透明度
ColorDrawable[] color = {new ColorDrawable(0x223333FF), new ColorDrawable(0xDD000000)};
接下来的两次尝试只是尝试一些新的东西,因为我想使用颜色资源
下一行我得到一个没有透明度的黑色
ColorDrawable[] color = {new ColorDrawable(0x223333FF), new ColorDrawable(0xDD000000)};
这将导致最终的蓝色,而不是透明的黑色
ColorDrawable[] color = {new ColorDrawable(0x223333FF), new ColorDrawable(0x33000000)};
我也尝试过,但没有效果:
color[1].setAlpha(50);
那么,我做错了什么?或者有更好的方法来实现这一点吗?您可以使用
argbeevaluator
ObjectAnimator animator = ObjectAnimator.ofInt(yourView, "backgroundColor", Color.RED, Color.BLUE).setDuration(3000);
animator.setEvaluator(new ArgbEvaluator());
animator.start();
您可以使用
argbeevaluator
ObjectAnimator animator = ObjectAnimator.ofInt(yourView, "backgroundColor", Color.RED, Color.BLUE).setDuration(3000);
animator.setEvaluator(new ArgbEvaluator());
animator.start();
ObjectAnimator使用android 3.0(sdk 11)。对于以前的版本,我下一步做了:
private void init(int value){
int alpha = value*0x1000000;
ColorDrawable cl1= new
ColorDrawable(mContext.getResources().getColor(R.color.transtion_item1)
+alpha);
ColorDrawable cl2= new
ColorDrawable(mContext.getResources().getColor(R.color.transtion_item2)
+alpha);
TransitionDrawable transition = new TransitionDrawable( new Drawable[]{cl1,cl2});
if(Build.VERSION.SDK_INT<16)
v.setBackgroundDrawable(transition);
else
v.setBackground(transition);
mTransitionCount=0;
startCyclicTransition(transition);
}
private void startCyclicTransition(final TransitionDrawable trans){
if (mTransitionCount >=0) {
if(mTransitionCount%2==0) {
trans.startTransition(2000);
}else {
trans.reverseTransition(2000);
}
mTransitionCount++;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startCyclicTransition(trans);
}
}, 2000);
}
}
private void init(int值){
int alpha=值*0x1000000;
可着色cl1=新
ColorDrawable(mContext.getResources().getColor(R.color.transion_item1)
+α);
可着色cl2=新
ColorDrawable(mContext.getResources().getColor(R.color.transion_item2)
+α);
TransitionDrawable transition=新的TransitionDrawable(新的Drawable[]{cl1,cl2});
if(Build.VERSION.SDK_INT=0){
如果(MTTransitionCount%2==0){
trans.startTransition(2000年);
}否则{
反变换(2000年);
}
mTransitionCount++;
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
开始循环转换(trans);
}
}, 2000);
}
}
ObjectAnimator从android 3.0(sdk 11)开始工作。对于以前的版本,我下一步做了:
private void init(int value){
int alpha = value*0x1000000;
ColorDrawable cl1= new
ColorDrawable(mContext.getResources().getColor(R.color.transtion_item1)
+alpha);
ColorDrawable cl2= new
ColorDrawable(mContext.getResources().getColor(R.color.transtion_item2)
+alpha);
TransitionDrawable transition = new TransitionDrawable( new Drawable[]{cl1,cl2});
if(Build.VERSION.SDK_INT<16)
v.setBackgroundDrawable(transition);
else
v.setBackground(transition);
mTransitionCount=0;
startCyclicTransition(transition);
}
private void startCyclicTransition(final TransitionDrawable trans){
if (mTransitionCount >=0) {
if(mTransitionCount%2==0) {
trans.startTransition(2000);
}else {
trans.reverseTransition(2000);
}
mTransitionCount++;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startCyclicTransition(trans);
}
}, 2000);
}
}
private void init(int值){
int alpha=值*0x1000000;
可着色cl1=新
ColorDrawable(mContext.getResources().getColor(R.color.transion_item1)
+α);
可着色cl2=新
ColorDrawable(mContext.getResources().getColor(R.color.transion_item2)
+α);
TransitionDrawable transition=新的TransitionDrawable(新的Drawable[]{cl1,cl2});
if(Build.VERSION.SDK_INT=0){
如果(MTTransitionCount%2==0){
trans.startTransition(2000年);
}否则{
反变换(2000年);
}
mTransitionCount++;
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
开始循环转换(trans);
}
}, 2000);
}
}
它成功了。然而,它没有识别start(),我必须这样做:ObjectAnimator animator=ObjectAnimator.ofInt(lastApp,“backgroundColor”,getResources().getColor(R.color.blue_transition),getResources().getColor(R.color.black_overlay_transition));设置持续时间(300);setEvaluator(新的argbeEvaluator());animator.start();你知道为什么吗?@lotdrops是的,这是因为setEvaluator不像setDuration那样返回ObjectAnimator。更新答案它起作用了。然而,它没有识别start(),我必须这样做:ObjectAnimator animator=ObjectAnimator.ofInt(lastApp,“backgroundColor”,getResources().getColor(R.color.blue_transition),getResources().getColor(R.color.black_overlay_transition));设置持续时间(300);setEvaluator(新的argbeEvaluator());animator.start();你知道为什么吗?@lotdrops是的,这是因为setEvaluator不像setDuration那样返回ObjectAnimator。更新答案