I have an arbitrary view that I want to fade in on top of another view. In api level 11 I see there is a setAlpha, but I'm stuck supporting api level 7. I haven't run across a simple way to do this. How can I set the alpha for the entire view without messing with each individual component?
You should be able to achieve a reasonable effect using an AlphaAnimation at API level 7.
View v = findViewById(R.id.view2);
AlphaAnimation aa = new AlphaAnimation(0f,1f);
aa.setDuration(5000);
v.startAnimation(aa);
Using AlphaAnimation would be an excellent solution for most transitions, and would certainly have worked for me if I couldn't find a way to do exactly what I was trying to do, which involves fading between two views in a graduated way based on the tilt angle of the device. Fortunately I have! Here is the strategy I took: I wrapped the view in a custom subclass of FrameLayout, and implemented onDraw. There, I captured the child view as a bitmap, and then redrew the bitmap with the intended alpha. Here's some code. I'll edit when I get cleaned up, this is just proof of concept, but it works like a charm:
public class AlphaView extends FrameLayout {
private int alpha = 255;
public AlphaView(Context context) {
super(context);
setWillNotDraw(false);
}
public AlphaView(Context context, AttributeSet attrs) {
super(context, attrs);
setWillNotDraw(false);
}
public AlphaView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setWillNotDraw(false);
}
public void setCustomAlpha(int alpha) {
if (this.alpha != alpha) {
this.alpha = alpha;
invalidate();
}
}
public int getCustomAlpha() {
return alpha;
}
@Override
protected void onDraw(Canvas canvas) {
for(int index = 0; index < getChildCount(); index++ ) {
View child = getChildAt(index);
child.setVisibility(View.INVISIBLE);
child.setDrawingCacheEnabled(true);
Bitmap bitmap = child.getDrawingCache(true);
bitmap = Bitmap.createBitmap(bitmap);
child.setDrawingCacheEnabled(false);
Paint paint = new Paint();
paint.setAlpha(alpha);
canvas.drawBitmap(bitmap, 0, 0, paint);
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With