Java 更改循环上的位图图像
我有一个画布,我希望每50毫秒更改一次位图图像 基本上我想做的是一个gif动画 如你所见,有4个图像,每50毫秒我希望它改变图像 下面的代码不起作用,我不知道为什么Java 更改循环上的位图图像,java,android,bitmap,Java,Android,Bitmap,我有一个画布,我希望每50毫秒更改一次位图图像 基本上我想做的是一个gif动画 如你所见,有4个图像,每50毫秒我希望它改变图像 下面的代码不起作用,我不知道为什么 protected void onDraw(final Canvas canvas) { res = getResources(); image = BitmapFactory.decodeResource(res, R.drawable.image_1); canvas.drawBitmap(image,
protected void onDraw(final Canvas canvas) {
res = getResources();
image = BitmapFactory.decodeResource(res, R.drawable.image_1);
canvas.drawBitmap(image, 0, 0, paint);
new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted())
try {
Thread.sleep(50);
System.out.println("OK2");
time++;
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
if (time == 1) {
image = BitmapFactory.decodeResource(res,
R.drawable.image_1);
canvas.drawBitmap(image, 0, 0, paint);
invalidate();
}
if (time == 2) {
image = BitmapFactory.decodeResource(res,
R.drawable.image_2);
canvas.drawBitmap(image, 0, 0, paint);
invalidate();
}
if (time == 3) {
image = BitmapFactory.decodeResource(res,
R.drawable.image_3);
canvas.drawBitmap(image, 0, 0, paint);
invalidate();
}
if (time >= 4) {
time = 0;
image = BitmapFactory.decodeResource(res,
R.drawable.image_4);
canvas.drawBitmap(image, 0, 0, paint);
invalidate();
}
}
});
} catch (InterruptedException e) {
}
}
}).start();
super.onDraw(canvas);
}
提前感谢。有几个问题: 您每次都在反复解码资源<代码>解码资源可能不够快,无法在50毫秒内加载图像。将帧解码一次并将其存储在阵列中会更快。e、 g:
Bitmap images[4];
void loadFrames()
{
res = getResources();
images[0] = BitmapFactory.decodeResource(res, R.drawable.image_1);
images[1] = BitmapFactory.decodeResource(res, R.drawable.image_2);
images[2] = BitmapFactory.decodeResource(res, R.drawable.image_3);
images[3] = BitmapFactory.decodeResource(res, R.drawable.image_4);
}
每次调用onDraw()
时,您都会启动一个新线程,这意味着将创建数百个线程。相反,您应该只创建一次线程。在线程内部,增加计数器并将image
设置为正确的帧,然后调用invalidate:
Thread.sleep(50);
time = (time + 1) % 4;
image = images[time];
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
invalidate();
}
};
然后在onDraw()
中,使用当前图像绘制到画布上:
canvas.drawBitmap(image, 0, 0, paint);
你可以使用这个链接。这是用于滑动图像的
public void imageSlider(){
HashMap<String,Integer> file_maps = new HashMap<String, Integer>();
file_maps.put("Palava Titans - Lodha Palava, Dombivali",R.drawable.img1);
file_maps.put("Dribble Football -Imax, Wadala",R.drawable.img2);
file_maps.put("Astro Park - Atria, Worli",R.drawable.img3);
file_maps.put("TigerPlay - Citimall, Andheri w", R.drawable.img4);
file_maps.put("DSF - Ryan International, Andheri", R.drawable.img5);
file_maps.put("The Arena, Sakinaka", R.drawable.img6);
file_maps.put("Astro Park - Smash, Lower Parel", R.drawable.img7);
file_maps.put("DSF - Rcity, Ghatkopar", R.drawable.img8);
file_maps.put("Father Agnel - Vashi", R.drawable.img9);
file_maps.put("Footbrawl - Milan Subway", R.drawable.img10);
for(String name : file_maps.keySet()){
TextSliderView textSliderView = new TextSliderView(this);
// initialize a SliderLayout
textSliderView
.description(name)
.image(file_maps.get(name))
.setScaleType(BaseSliderView.ScaleType.Fit);
//add your extra information
textSliderView.getBundle()
.putString("extra",name);
mDemoSlider.addSlider(textSliderView);
}
mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);
mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Right_Bottom);
mDemoSlider.setCustomAnimation(new DescriptionAnimation());
mDemoSlider.setDuration(5000);
}
public void imageSlider(){
HashMap文件_maps=新HashMap();
文件_maps.put(“Palava Titans-Lodha Palava,Dombivali”,R.drawable.img1);
文件_maps.put(“运球足球-Imax,Wadala”,R.drawable.img2);
文件_maps.put(“Astro Park-Atria,Worli”,R.drawable.img3);
文件_maps.put(“TigerPlay-Citimall,Andheri w”,R.drawable.img4);
文件_maps.put(“DSF-Ryan International,Andheri”,R.drawable.img5);
文件_maps.put(“Sakinaka竞技场”,R.drawable.img6);
文件_maps.put(“Astro Park-Smash,Lower Parel”,R.drawable.img7);
文件_maps.put(“DSF-Rcity,Ghatkopar”,R.drawable.img8);
文件_maps.put(“Agnel-Vashi神父”,R.drawable.img9);
文件_maps.put(“足球画-米兰地铁”,R.drawable.img10);
for(字符串名称:file_maps.keySet()){
TextSliderView TextSliderView=新的TextSliderView(此);
//初始化幻灯片布局
文本幻灯片视图
.说明(姓名)
.image(文件_maps.get(名称))
.setScaleType(BaseSliderView.ScaleType.Fit);
//添加您的额外信息
textSliderView.getBundle()
.putString(“额外”,名称);
mDemoSlider.addSlider(textSliderView);
}
mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);
mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.右下);
setCustomAnimation(新的DescriptionAnimation());
mdemosider.setDuration(5000);
}
在onCreate方法中调用此函数您需要解释什么不起作用。非常感谢!它起作用了