reveal 如何從SD卡加載圖像,並使用Android中的AnimationDrawable或AnimationUtils運行動畫



animation android xml (1)

我有圖像存儲在SD卡和使用該圖像我希望運行一個動畫。 我正在使用下面的代碼,但我的動畫根本不工作。

代碼片段

playAnimation("xxx", medid, 25);//calling method
break;

public void playAnimation(String string, int medid2, int length) {
        // TODO Auto-generated method stub
        animation = new AnimationDrawable();
        Bitmap bitMap;
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 2; //reduce quality
        player = MediaPlayer.create(this.getApplicationContext(), medid2);
        try {
            for (int i = 0; i <= length; i++) {
                System.out.println("File Name : - " + Environment.getExternalStorageDirectory().toString() + "/" + string + i);
                bitMap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().toString() + "/" + string + i);
                Drawable bmp = new BitmapDrawable(bitMap);
                animation.addFrame(bmp, DURATION);
            }
            animation.setOneShot(true);
            animation.setVisible(true, true);
            int frames = animation.getNumberOfFrames();
            System.out.println("Number of Frames are - " + frames);
            img.setBackgroundDrawable(animation);
            img.post(new Starter());

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

class Starter implements Runnable {
        public void run() {
            try {
                if(animation.isRunning()) {
                    animation.stop();
                    animation.start();
                    if (player.isPlaying()) {
                        player.stop();
                        player.start();
                    }
                    else {
                        player.start();
                    }
                } else {
                    animation.start();
                    if (player.isPlaying()) {
                        player.stop();
                        player.start();
                    }
                    else {
                        player.start();
                    }
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    }

使用框架動畫的概念,我需要運行我的動畫。 我能夠獲取圖像,因為我已經做了一些調試,但是當我點擊按鈕,這種方法被稱為我的屏幕不顯示任何動畫。 它只顯示黑屏。 我沒有在這個錯誤。 如果有人有想法,請讓我知道。

謝謝


AnimationDrawable只是顯示黑屏,可能是由不同的原因造成的。 例如,在“Android開發人員指南”的“ 可繪製動畫”中 ,可以使用以下代碼加載一系列可繪製資源。

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
  rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
  rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}

但是,如果在getBackground()之後像下面的代碼那樣設置資源,屏幕將保持黑屏。

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
  rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
  rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
}

如果你想從SD卡加載圖像,並將它們顯示為動畫,可以參考下面的代碼。 我編寫並測試API 8(2.3)。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    showedImage = (ImageView) findViewById(R.id.imageView_showedPic);
    showedImage.setBackgroundResource(R.drawable.slides);
    frameAnimation = (AnimationDrawable) showedImage.getBackground();
    addPicturesOnExternalStorageIfExist();
}

@Override
public void onWindowFocusChanged (boolean hasFocus){
    super.onWindowFocusChanged (hasFocus);
    frameAnimation.start();
}
private void addPicturesOnExternalStorageIfExist() {
    // check if external storage 
    String state = Environment.getExternalStorageState();
    if ( !(Environment.MEDIA_MOUNTED.equals(state) || 
          Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) ) {
        return;
    } 

    // check if a directory named as this application
    File rootPath = Environment.getExternalStorageDirectory();
    // 'happyShow' is the name of directory
    File pictureDirectory = new File(rootPath, "happyShow"); 
    if ( !pictureDirectory.exists() ) {
        Log.d("Activity", "NoFoundExternalDirectory");
        return;
    }

    // check if there is any picture
    //create a FilenameFilter and override its accept-method
    FilenameFilter filefilter = new FilenameFilter() {
        public boolean accept(File dir, String name) {
        return (name.endsWith(".jpeg") || 
                name.endsWith(".jpg") || 
                name.endsWith(".png") );
        }
    };

    String[] sNamelist = pictureDirectory.list(filefilter);
    if (sNamelist.length == 0) {
        Log.d("Activity", "No pictures in directory.");
        return;
    }

    for (String filename : sNamelist) {
        Log.d("Activity", pictureDirectory.getPath() + '/' + filename);
        frameAnimation.addFrame(
                Drawable.createFromPath(pictureDirectory.getPath() + '/' + filename),
                DURATION);
    }

    return;
}




android-imageview