`
LoveZhou
  • 浏览: 270248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Drawable对象的mutate()方法为什么不起作用?

阅读更多
要在两个ImageView中显示用一张图片,而使它们的透明度不一样,利用Drawable对象的setAlpha()方法可以改变透明度,但是由于是同一张图片,底层只有一个Drawable对象,所以改变透明度的时候,所有显示的图片的透明度均会被更改,调用mutate()方法,可以使Drawable对象生成不同的constantstate对象,修改时就不会影响其它drawable对象的状态,但是调用后,不起作用,请会的朋友帮忙解答一下,先行谢过!
测试代码
package com.zhou.activity;

import android.app.Activity;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;

public class DrawableActivity extends Activity {
    ImageView myImageView;
    ImageView myImageView2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myImageView = (ImageView) this.findViewById(R.id.myImageView);
        myImageView2 = (ImageView) this.findViewById(R.id.myImageView2);
        
        //取得图片
        Resources res = this.getResources();
        Drawable drawable = res.getDrawable(R.drawable.link);
    
        //不透明
        drawable.mutate().setAlpha(255);
        myImageView.setImageDrawable(drawable);
        //透明
        drawable.mutate().setAlpha(55);
        myImageView2.setImageDrawable(drawable);
    }
} 

分享到:
评论
4 楼 LoveZhou 2012-07-20  
shaohuaabc123 写道
        //不透明 
        drawable.mutate().setAlpha(255); 
        myImageView.setImageDrawable(drawable); 
        //透明 
        Drawable drawable = res.getDrawable(R.drawable.link); 
        drawable.mutate().setAlpha(55); 
        myImageView2.setImageDrawable(drawable);
///这样修改应该可以

谢谢,我有空试一下
3 楼 shaohuaabc123 2012-07-19  
//不透明
        drawable.mutate().setAlpha(255);
        myImageView.setImageDrawable(drawable);
        //透明
        Drawable drawable1 = res.getDrawable(R.drawable.link);
        drawable1.mutate().setAlpha(55);
        myImageView2.setImageDrawable(drawable1);
///这样修改应该可以
2 楼 shaohuaabc123 2012-07-19  
        //不透明 
        drawable.mutate().setAlpha(255); 
        myImageView.setImageDrawable(drawable); 
        //透明 
        Drawable drawable = res.getDrawable(R.drawable.link); 
        drawable.mutate().setAlpha(55); 
        myImageView2.setImageDrawable(drawable);
///这样修改应该可以
1 楼 Cuba_Libre 2012-06-30  
怎么说呢,
你要设置两个drawable (d1,d2),然后再分别mutate.setAlpha(255或者55),这样不同了。
你可以试验下,不用mutate()的话,即使d1.setAlpha(255),当d2.setAlpha(55)的时候,d1的alpha也会变成55的,因为貌似setalpha是直接在改变引用对象的。

相关推荐

Global site tag (gtag.js) - Google Analytics