首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android动态壁纸中不使用类的方法

在Android动态壁纸中不使用类的方法
EN

Stack Overflow用户
提问于 2012-05-30 13:18:37
回答 1查看 270关注 0票数 0

我正试图在运行时在生活壁纸中更改图像。我正在调用方法changeFlowers。我能够打印Log.W(),但无法更改位图。提前谢谢。

当我从这里调用f1.changeColor(this._theme)时,它不能工作,我希望在运行时更改fish位图图像

代码语言:javascript
复制
public void changeFlowers(int i)
{


    FlowerOne f1 = (FlowerOne)(this._fishes.get(i));   
    f1.changeColor(this._theme); // 


}

changeColor函数来自FishOne.java

代码语言:javascript
复制
public void changeColor(int mfishColor)
{


    switch(mfishColor) {
    case 1:

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPurgeable = true;
    this.leftBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.fish1, options);

    BitmapFactory.Options options1 = new BitmapFactory.Options();
    options1.inPurgeable = true;
    this.rightBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.fish2, options1);

    break;

    case 2:
    BitmapFactory.Options options2 = new BitmapFactory.Options();
    options2.inPurgeable = true;
    this.leftBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.redfish1, options2);

    BitmapFactory.Options options3 = new BitmapFactory.Options();
    options3.inPurgeable = true;
    this.rightBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.redfish2, options3);

    break;
    default:
    }


}

Aquarium.java

代码语言:javascript
复制
public class Aquarium {
private AquariumThread _aquariumThread; 
private SurfaceHolder _surfaceHolder;   
private ArrayList<Renderable> _fishes;  
private Bitmap _backgroundImage;
private Context _context;


public void render(){
    Canvas canvas = null;
    try{

    canvas = this._surfaceHolder.lockCanvas(null);
    synchronized (this._surfaceHolder) {
        this.onDraw(canvas);
    }

    }finally{
        if(canvas != null){
            this._surfaceHolder.unlockCanvasAndPost(canvas);
        }
    }   
}


protected void onDraw(Canvas canvas) {
    this.renderBackGround(canvas);
    for (Renderable renderable : this._fishes) {
        renderable.render(canvas);
    }
};

public void initialize(Context context, SurfaceHolder surfaceHolder) {
    this._fishes = new ArrayList<Renderable>();
}



protected void onDraw(Canvas canvas) {
    this.renderBackGround(canvas);
    for (Renderable renderable : this._fishes) {
        renderable.render(canvas);
    }
};


public void start(){
    this._aquariumThread.switchOn();
}


public void stop(){
    boolean retry = true;
    this._aquariumThread.switchOff();
    while (retry) {
    try {
     this._aquariumThread.join();
        retry = false;
    } catch (InterruptedException e) {
        // we will try it again and again...
}
}
}


public synchronized void addFishes() {      

Point startPoint1 = new Point(1,300);
this._fishes.add(new fishOne(this._context, this, startPoint1, 90));

Point startPoint2 = new Point(100,300);
this._fishes.add(new fishOne(this._context, this, startPoint2, 90));

Point startPoint3 = new Point(200,300);
this._fishes.add(new fishOne(this._context, this, startPoint3, 90));

}





public void changeFlowers(int i)
{


    FlowerOne f1 = (FlowerOne)(this._fishes.get(i));
    f1.changeColor(this._theme);


}


}

FishOne.java

代码语言:javascript
复制
public class fishOne extends Animal {
private static final int TOTAL_FRAMES_IN_SPRITE = 1;
private static final int CLOWN_FISH_FPS = 1; 

int _fishColor;
Bitmap leftBitmap;
Bitmap rightBitmap;


public fishOne(Context context, Aquarium aquarium,  Point startPoint, int speed){       

super(context, aquarium);   
this.changeColor(1);
this.initialize(this.leftBitmap, this.rightBitmap, CLOWN_FISH_FPS, TOTAL_FRAMES_IN_SPRITE, startPoint, speed);

    }


public void changeColor(int mfishColor)
{


    switch(mfishColor) {
    case 1:

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPurgeable = true;
    this.leftBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.fish1, options);

    BitmapFactory.Options options1 = new BitmapFactory.Options();
    options1.inPurgeable = true;
    this.rightBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.fish2, options1);

    break;

    case 2:
    BitmapFactory.Options options2 = new BitmapFactory.Options();
    options2.inPurgeable = true;
    this.leftBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.redfish1, options2);

    BitmapFactory.Options options3 = new BitmapFactory.Options();
    options3.inPurgeable = true;
    this.rightBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.redfish2, options3);

    break;
    default:
    }


}


public void render(Canvas canvas){
    super.render(canvas);   
}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-31 10:47:36

在方法中重新初始化。啊,真灵

代码语言:javascript
复制
this.initialize(this.leftBitmap, this.rightBitmap, CLOWN_FISH_FPS, TOTAL_FRAMES_IN_SPRITE, startPoint, speed);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10817138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档