android将视图背景从一种颜色过渡到另一种颜色

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

我有一个透明的黑色背景视图:#DD000000

我想要的是,在某些情况下,视图从#223333FF转换回第一种颜色

//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。更新答案