将Alpha值设置为ImageView

时间:2012-11-22 10:10:05

标签: android

我使用以下代码设置ImageView的alpha值(这应该与所有设备兼容,甚至是API 11之前的版本)

AlphaAnimation alpha = new AlphaAnimation(0.85F, 0.85F);
alpha.setDuration(0); // Make animation instant
alpha.setFillAfter(true); // Tell it to persist after the animation ends
ImageView view = (ImageView) findViewById(R.id.transparentBackground);
view.startAnimation(alpha);

但是,当我在运行姜饼及其下方的设备上打开应用程序时,imageView是完全透明的,但在运行蜂窝或更高版本的设备上,alpha值设置为.85并且imageView显示完美。

如何在gingerBread上实现这一点?

3 个答案:

答案 0 :(得分:2)

一种简单的方法是使用NineOldAndroids项目将Honeycomb动画API移植回旧版本,包括AlphaAnimation。请参阅http://nineoldandroids.com/

所以,使用ObjectAnimator会是这样的:

ObjectAnimator.ofFloat(imageView, "alpha", .85f).start();

答案 1 :(得分:0)

你有一个功能(由于新视图处理透明度的通用方法已被弃用,但可以在Android 2.x上安全使用):

myImageView.setAlpha(128); // range [0, 255]

您必须实现自定义动画。这可以使用处理程序完成,例如:

Handler animationHandler = new Handler() {
   public void handleMessage(Message msg) {
       int currentAlpha = msg.arg1;
       int targetAlpha = msg.arg2;

       if (currentAlpha==targetAlpha) return;
       else {
           if (currentAlpha<targetAlpha) --currentAlpha;
           else ++currentAlpha;

           imageView.setAlpha(currentAlpha);

           sendMessageDelayed(obtainMessage(0, currentAlpha, targetAlpha), 10);
       }
   }
}


// Show imageview
animationHandler.sendMessage(animationHandler.obtainMessage(0, currentAlpha, 255));

// Hide imageview
animationHandler.sendMessage(animationHandler.obtainMessage(0, currentAlpha, 0));
  • 上面的代码不是内存泄漏安全的(处理程序应该是静态的,应该保持对上下文和视图的弱引用
  • 你应该改进它以控制动画速度......
  • 您需要保持当前的alpha值,因为imageView没有getAlpha方法。

答案 2 :(得分:0)

好的,让我们创建一个自定义的imageview,通过覆盖onDraw来解决问题:)

AlphaImageView.java

package com.example.shareintent;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.ImageView;

public class AlphaImageView extends ImageView {

    public AlphaImageView(Context context) {
        super(context);
    }

    public AlphaImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AlphaImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onDraw(Canvas canvas){
        canvas.saveLayerAlpha(0, 0, canvas.getWidth(), canvas.getHeight(), 0x66, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
        super.onDraw(canvas);
    }

}

您的活动xml

<com.example.shareintent.AlphaImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="52dp"
        android:layout_marginTop="50dp"
        android:src="@drawable/ic_launcher" />