同时运行动画和图像切换器

时间:2014-12-11 15:12:48

标签: java android imageview android-animation android-gallery

我试图在一定时间后从动画列表中运行图像,但我也在屏幕顶部添加了图库,用户可以从中选择任何图像并显示,我创建了线程将在五秒钟后反复启动动画。我的代码是:

 int imgs[] =  
            {  
                R.drawable.mashad_one, 
                R.drawable.mashad_two, 
                R.drawable.mashad_three, 
                R.drawable.mashad_four,
                R.drawable.mashad_five,
                R.drawable.mashad_six,
                R.drawable.mashad_seven,
            };
     int i=0,flag=0;
    ImageSwitcher imgBus;
    AnimationDrawable animation; 
    Handler mHandler = new Handler();
    void func()
    {
         imgBus.setFactory(this);
    }


    @SuppressLint("NewApi") @Override
         protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);

                setContentView(R.layout.dutyfree);
                ActionBar bar = getActionBar();
                bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FF6600")));  // Declare object of Utils class;
                Gallery gallery = (Gallery) findViewById(R.id.gallery1);
                gallery.setAdapter(new ImageAdapter(this));

                gallery.setOnItemClickListener(new OnItemClickListener() {

                    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                            long arg3) {

                        if(i==0)

                        {
                            i++;
                            func();
                        }

                        flag=1;
                        imgBus.setImageResource(imgs[arg2]);
                    }
                });

               imgBus = (ImageSwitcher) findViewById(R.id.imageSwitcher1);
             imgBus.setBackgroundResource(R.drawable.anim);

                    imgBus.setInAnimation(AnimationUtils.loadAnimation(this,
                            android.R.anim.fade_in));
                    imgBus.setOutAnimation(AnimationUtils.loadAnimation(this,
                            android.R.anim.fade_out));

                animation = (AnimationDrawable) imgBus.getBackground();


                animation.start();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        while (true) {
                            try {
                                Thread.sleep(5000);
                                mHandler.post(new Runnable() {

                                    @Override
                                    public void run() {
                                        // TODO Auto-generated method stub
                                        // Write your code here to update the UI.
                                        if(flag==1){
                                            animation.start();
                                        }
                                    }
                                });
                            } catch (Exception e) {
                                // TODO: handle exception
                            }
                        }
                    }
                }).start();


}
    public class ImageAdapter extends BaseAdapter {

        private Context ctx;

        public ImageAdapter(Context c) {
            ctx = c; 
        }

        public int getCount() {

            return imgs.length;
        }


        public long getItemId(int arg0) {

            return arg0;
        }

        public View getView(int arg0, View arg1, ViewGroup arg2) {

            ImageView iView = new ImageView(ctx);
            iView.setImageResource(imgs[arg0]);
            iView.setScaleType(ImageView.ScaleType.FIT_XY);
            iView.setLayoutParams(new Gallery.LayoutParams(200, 150));
            return iView;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }
    }

    public View makeView() {
        ImageView iView = new ImageView(this);
        iView.setScaleType(ImageView.ScaleType.FIT_CENTER);
        iView.setLayoutParams(new ImageSwitcher.LayoutParams
            (LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        iView.setBackgroundColor(0xFF000000);
        return iView;
    }

}

问题是当activty开始动画开始运行并且图像不断变化时,但是一旦我按下画廊中的任何图像,动画停止并且它不会再次启动,,,,请帮我找到问题。

1 个答案:

答案 0 :(得分:5)

我得到了我的问题的解决方案,我只使用了imageswitcher的重置功能,并在点击方法中使用它。

int imgs[] =  
        {  
            R.drawable.mashad_one, 
            R.drawable.mashad_two, 
            R.drawable.mashad_three, 
            R.drawable.mashad_four,
            R.drawable.mashad_five,
            R.drawable.mashad_six,
            R.drawable.mashad_seven,
        };
 int i=0,flag=0;
ImageSwitcher imgBus;
AnimationDrawable animation; 
Handler mHandler = new Handler();
void func()
{
     imgBus.setFactory(this);
}


@SuppressLint("NewApi") @Override
     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);

            setContentView(R.layout.dutyfree);
            ActionBar bar = getActionBar();
            bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FF6600")));  // Declare object of Utils class;
            Gallery gallery = (Gallery) findViewById(R.id.gallery1);
            gallery.setAdapter(new ImageAdapter(this));

            gallery.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {

                    if(i==0)

                    {
                        i++;
                        func();
                    }

                    flag=1;
animation.stop();
                    imgBus.setImageResource(imgs[arg2]);
                }
            });

           imgBus = (ImageSwitcher) findViewById(R.id.imageSwitcher1);
         imgBus.setBackgroundResource(R.drawable.anim);

                imgBus.setInAnimation(AnimationUtils.loadAnimation(this,
                        android.R.anim.fade_in));
                imgBus.setOutAnimation(AnimationUtils.loadAnimation(this,
                        android.R.anim.fade_out));

            animation = (AnimationDrawable) imgBus.getBackground();


            animation.start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    while (true) {
                        try {
                            Thread.sleep(5000);
                            mHandler.post(new Runnable() {

                                @Override
                                public void run() {
                                    // TODO Auto-generated method stub


                         // Write your code here to update the UI.
                                        if(flag==1){
    imgBus.reset();
                                            animation.start();
                                        }
                                    }
                                });
                            } catch (Exception e) {
                                // TODO: handle exception
                            }
                        }
                    }
                }).start();


    }

    public class ImageAdapter extends BaseAdapter {
        private Context ctx;

        public ImageAdapter(Context c) {
            ctx = c; 
        }

        public int getCount() {

            return imgs.length;
        }


        public long getItemId(int arg0) {

            return arg0;
        }

        public View getView(int arg0, View arg1, ViewGroup arg2) {

            ImageView iView = new ImageView(ctx);
            iView.setImageResource(imgs[arg0]);
            iView.setScaleType(ImageView.ScaleType.FIT_XY);
            iView.setLayoutParams(new Gallery.LayoutParams(200, 150));
            return iView;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }
    }

    public View makeView() {
        ImageView iView = new ImageView(this);
        iView.setScaleType(ImageView.ScaleType.FIT_CENTER);
        iView.setLayoutParams(new ImageSwitcher.LayoutParams
            (LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        iView.setBackgroundColor(0xFF000000);
        return iView;
    }

}