我试图在一定时间后从动画列表中运行图像,但我也在屏幕顶部添加了图库,用户可以从中选择任何图像并显示,我创建了线程将在五秒钟后反复启动动画。我的代码是:
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开始动画开始运行并且图像不断变化时,但是一旦我按下画廊中的任何图像,动画停止并且它不会再次启动,,,,请帮我找到问题。
答案 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;
}
}