Intereting Posts

Как установить альфа-значение всего представления на уровне api 7 (Android 2.1)

У меня есть произвольная точка зрения, что я хочу исчезнуть поверх другого представления. В 11-ом уровне 11 я вижу, что есть setAlpha, но я застрял в поддержке уровня api 7. Я не сталкивался с простым способом сделать это. Как я могу настроить альфа для всего представления, не вникая в каждый отдельный компонент?

Вы должны иметь возможность добиться разумного эффекта, используя AlphaAnimation на уровне API 7.

View v = findViewById(R.id.view2); AlphaAnimation aa = new AlphaAnimation(0f,1f); aa.setDuration(5000); v.startAnimation(aa); 

Использование AlphaAnimation было бы отличным решением для большинства переходов и, безусловно, сработало бы для меня, если бы я не смог найти способ сделать именно то, что я пытался сделать, что предполагает постепенное исчезновение двух видов в зависимости от наклона Угол устройства. К счастью, у меня есть! Вот стратегия, которую я взял: я завернул представление в пользовательский подкласс FrameLayout и реализовал onDraw. Там я захватил представление child как растровое изображение, а затем перерисовал растровое изображение с предполагаемой альфой. Вот код. Я буду редактировать, когда меня убирают, это просто доказательство концепции, но оно работает как шарм:

 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); } } } 

Это будет зависеть от типа вида.

Для TextView в xml вы можете иметь следующие атрибуты:

 android:background="#00000000" android:textColor="#77FFFFFF" 

Первые два числа – это альфа-значения от 00 до FF (в гексагоне). Фон будет полностью прозрачным, а текст будет белым, частично прозрачным. Я не тестировал это, но он должен работать.

Если у вас есть фон, являющийся изображением, то самое легкое, что нужно сделать, – предварительно создать свой png с прозрачностью.