Android:处理程序在removeCallback()之后未停止
我需要在我的应用程序中实现幻灯片放映。为此,我使用了Android:处理程序在removeCallback()之后未停止,android,handler,Android,Handler,我需要在我的应用程序中实现幻灯片放映。为此,我使用了处理程序。当我单击“播放”按钮时,幻灯片放映开始,播放按钮变为“暂停”按钮。但当我再次单击以暂停幻灯片放映时,它从不暂停。尽管如此,我们仍在继续执行。 这是我的密码: public class GalleryImageFullscreen extends TIEBaseActivity implements OnClickListener { PrefStore lang_PrefStore; Resources res; Config
处理程序。当我单击“播放”按钮时,幻灯片放映开始,播放按钮变为“暂停”按钮。但当我再次单击以暂停幻灯片放映时,它从不暂停。尽管如此,我们仍在继续执行。
这是我的密码:
public class GalleryImageFullscreen extends TIEBaseActivity implements
OnClickListener {
PrefStore lang_PrefStore;
Resources res;
Configuration config;
Locale mLocale = null;
String language;
boolean isLocaleChanged = false;
ViewPager imgViewPager;
ArrayList<String> imgUrlList;
private ImageLoader imageLoader;
private DisplayImageOptions options;
int position;
ImageButton btnPrev, btnPlay, btnNext;
public static final String TAG = "TIEGalleryFS";
boolean isPlaying;
Handler mHandler;
SwitchImage swImageRunnable;
protected void onCreate(Bundle savedInstanceState) {
super.createDefaultView(savedInstanceState);
_headerBar.view.setVisibility(View.VISIBLE);
_footerBar.view.setVisibility(View.VISIBLE);
imgUrlList = getIntent().getStringArrayListExtra(
GalleryActivity.IMAGE_URL_LIST);
Log.v(TAG, "IMAGE LIST SIZE = " + imgUrlList.size());
position = getIntent().getIntExtra("POSITION", 0);
Log.v(TAG, "IMAGE POSITION = " + position);
mHandler = new Handler();
swImageRunnable = new SwitchImage();
super.setHeaderTitle(getResources().getString(R.string.gallery));
res = getResources();
lang_PrefStore = new PrefStore();
language = lang_PrefStore.getLanguageChoice(
GalleryImageFullscreen.this, FooterBar.LANG_SELECT);
Log.v("GalleryImageFullscreen language choice", language);
config = getBaseContext().getResources().getConfiguration();
if (!language.equals("")
&& language.equals(config.locale.getLanguage())) {
mLocale = new Locale(language);
Locale.setDefault(mLocale);
config.locale = mLocale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
Log.v("GalleryImageFullscreen onCreate languageset", "in if loop");
}
init();
imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration
.createDefault(GalleryImageFullscreen.this));
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.image_for_empty_url)
.showImageForEmptyUri(R.drawable.image_for_empty_url)
.cacheInMemory().cacheOnDisc()
.bitmapConfig(Bitmap.Config.RGB_565).build();
}// onCreate
private void init() {
loadFormFromResource(R.layout.gallery_image_fullscreen);
imgViewPager = (ViewPager) findViewById(R.id.imgpager);
btnPrev = (ImageButton) findViewById(R.id.btnPrev);
btnPlay = (ImageButton) findViewById(R.id.btnPlay);
btnNext = (ImageButton) findViewById(R.id.btnNext);
if ((imgUrlList != null) && (imgUrlList.size() > 0)) {
imgViewPager.setAdapter(new ImagePagerAdapter(imgUrlList));
imgViewPager.setCurrentItem(position);
}
btnPrev.setOnClickListener(this);
btnPlay.setOnClickListener(this);
btnNext.setOnClickListener(this);
}// init
public void onClick(View v) {
if (v.equals(btnPrev)) {
if (position != 0) {
position--;
imgViewPager.setCurrentItem(position, true);
}
Log.v(TAG, "PREV POSITION = " + position);
}
if (v.equals(btnPlay)) {
if (!isPlaying) {
Log.v(TAG, "in if isPlaying = " + isPlaying);
runTimerTask();
isPlaying = true;
btnPlay.setBackgroundResource(R.drawable.btn_pause);
} else {
Log.v(TAG, "in else isPlaying = " + isPlaying);
mHandler.removeCallbacks(swImageRunnable);
isPlaying = false;
btnPlay.setBackgroundResource(R.drawable.btn_play);
}
}
if (v.equals(btnNext)) {
if (position != (imgUrlList.size() - 1)) {
position++;
imgViewPager.setCurrentItem(position, true);
}
Log.v(TAG, "NEXT POSITION = " + position);
}
}// onClick
private class ImagePagerAdapter extends PagerAdapter {
private ArrayList<String> images;
private LayoutInflater inflater;
ImagePagerAdapter(ArrayList<String> images) {
this.images = images;
inflater = getLayoutInflater();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public void finishUpdate(View container) {
}
@Override
public int getCount() {
return images.size();
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
View imageLayout = inflater.inflate(R.layout.item_pager_image,
view, false);
ImageView imageView = (ImageView) imageLayout
.findViewById(R.id.image);
final ProgressBar spinner = (ProgressBar) imageLayout
.findViewById(R.id.loading);
imageLoader.displayImage(images.get(position), imageView, options,
new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
spinner.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
switch (failReason.getType()) {
case IO_ERROR:
break;
case DECODING_ERROR:
break;
case NETWORK_DENIED:
break;
case OUT_OF_MEMORY:
break;
case UNKNOWN:
break;
}
spinner.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri,
View view, Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
}
});
((ViewPager) view).addView(imageLayout, 0);
return imageLayout;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View container) {
}
}
@Override
protected void onPause() {
super.onPause();
if (imageLoader != null) {
imageLoader.stop();
}
}
private void runTimerTask() {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(3000);
mHandler.post(swImageRunnable);
} catch (Exception e) {
}
}
}
}).start();
}// runTimerTask
private class SwitchImage implements Runnable {
@Override
public void run() {
if (position != (imgUrlList.size() - 1)) {
Log.v(TAG, "in runnable if");
position++;
imgViewPager.setCurrentItem(position, true);
} else {
Log.v(TAG, "in runnable else");
//mHandler.removeCallbacks(swImageRunnable);
btnPlay.setBackgroundResource(R.drawable.btn_play);
isPlaying = false;
}
}
}
}// GalleryImageFullscreen
公共类GalleryImageFullscreen扩展TIEBaseActivity实现
onclick侦听器{
预存储lang_预存储;
资源和资源;
配置配置;
Locale mLocale=null;
字符串语言;
布尔值IsLocalChanged=false;
ViewPager imgViewPager;
ArrayList imgUrlList;
私有图像加载器;
私有显示图像选项;
内部位置;
图像按钮btnPrev、btnPlay、btnNext;
公共静态最终字符串TAG=“TIEGalleryFS”;
布尔显示;
汉德勒;
SwitchImage Swimagerunable;
创建时受保护的void(Bundle savedInstanceState){
super.createDefaultView(savedInstanceState);
_headerBar.view.setVisibility(视图.可见);
_footerBar.view.setVisibility(view.VISIBLE);
imgUrlList=getIntent().getStringArrayListExtra(
GalleryActivity.IMAGE\u URL\u列表);
Log.v(标记,“图像列表大小=“+imgurlist.SIZE());
位置=getIntent().getIntExtra(“位置”,0);
Log.v(标签,“图像位置=”+位置);
mHandler=新处理程序();
swimagerunable=newswitchimage();
setHeaderTitle(getResources().getString(R.string.gallery));
res=getResources();
lang_PrefStore=新的PrefStore();
language=lang\u PrefStore.getLanguageChoice(
GalleryImageFullscreen.this,FooterBar.LANG\u SELECT);
Log.v(“GalleryImage全屏语言选择”,语言);
config=getBaseContext().getResources().getConfiguration();
如果(!language.equals(“”)
&&language.equals(config.locale.getLanguage()){
mLocale=新区域设置(语言);
setDefault(mLocale);
config.locale=mLocale;
getBaseContext().getResources().updateConfiguration(配置、,
getBaseContext().getResources().getDisplayMetrics());
Log.v(“GalleryImageFullScreenOnCreate语言集”,“在if循环中”);
}
init();
imageLoader=imageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration
.createDefault(GalleryImageFullscreen.this));
选项=新建DisplayImageOptions.Builder()
.showStubImage(R.drawable.image\u表示\u空\u url)
.showImageForEmptyUri(R.drawable.image\u表示\u空\u url)
.cacheInMemory().cacheOnDisc()
.bitmapConfig(Bitmap.Config.RGB_565).build();
}//一次创建
私有void init(){
loadFormFromResource(R.layout.gallery\u image\u全屏);
imgViewPager=(ViewPager)findViewById(R.id.imgpager);
btnPrev=(图像按钮)findViewById(R.id.btnPrev);
btnPlay=(ImageButton)findViewById(R.id.btnPlay);
btnNext=(ImageButton)findViewById(R.id.btnNext);
if((imgurlist!=null)&&(imgurlist.size()>0)){
setAdapter(新的ImagePagerAdapter(imgurlist));
imgViewPager.setCurrentItem(位置);
}
btnPrev.setOnClickListener(此);
btnPlay.setOnClickListener(此);
btnNext.setOnClickListener(此);
}//初始化
公共void onClick(视图v){
如果(v.等于(btnPrev)){
如果(位置!=0){
位置--;
imgViewPager.setCurrentItem(位置,true);
}
Log.v(标签,“PREV POSITION=“+POSITION”);
}
如果(v.equals(btnPlay)){
如果(!显示){
Log.v(标签,“如果显示在屏幕上,则显示在屏幕上=”+isplay);
runTimerTask();
isplay=true;
btnPlay.setBackgroundResource(R.drawable.btn\u暂停);
}否则{
Log.v(标签“in-else isplay=“+isplay”);
mHandler.removeCallbacks(可切换);
isplay=false;
btnPlay.setBackgroundResource(R.drawable.btn_play);
}
}
如果(v.equals(btnNext)){
if(位置!=(imgurlist.size()-1)){
位置++;
imgViewPager.setCurrentItem(位置,true);
}
Log.v(标签,“下一个位置=”+位置);
}
}//onClick
私有类ImagePagerAdapter扩展了PagerAdapter{
私有数组列表图像;
私人充气机;
ImagePagerAdapter(ArrayList图像){
这个。图像=图像;
充气机=充气机();
}
@凌驾
公共项(视图组容器、int位置、对象){
((ViewPager)容器)。移除视图((视图)对象);
}
@凌驾
公共void finishUpdate(视图容器){
}
@凌驾
public int getCount(){
返回图像。size();
}
@凌驾
公共对象实例化项(视图组视图,int位置){
查看图像布局=充气机。充气(R.layout.item\u pager\u图像,
视图(错误);
ImageView ImageView=(ImageView)imageLayout
.findviewbyd(R.id.image);
最终ProgressBar微调器=(ProgressBar)图像布局
.findViewById(R.id.loading);
imageLoader.displayImage(images.get(位置)、imageView、选项、,
新的SimpleImageLoadingListener(){
@凌驾
public void onLoadingStarted(字符串imageUri,视图){
spinner.setVisibility(View.VISIBLE);
}
@凌驾
public void onload失败(字符串imageUri、视图、,
失效原因(失效原因){
开关(failReason.getType()){
案例IO_错误:
打破
案例解码错误:
打破
案件被驳回:
打破
大小写输出\u\u内存:
public class GalleryImageFullscreen extends TIEBaseActivity implements
OnClickListener {
PrefStore lang_PrefStore;
Resources res;
Configuration config;
Locale mLocale = null;
String language;
boolean isLocaleChanged = false;
ViewPager imgViewPager;
ArrayList<String> imgUrlList;
private ImageLoader imageLoader;
private DisplayImageOptions options;
int position;
ImageButton btnPrev, btnPlay, btnNext;
public static final String TAG = "TIEGalleryFS";
volatile boolean isPlaying;
SwitchImage swImageRunnable;
MyTimerTask myTask;
Timer myTimer;
protected void onCreate(Bundle savedInstanceState) {
super.createDefaultView(savedInstanceState);
_headerBar.view.setVisibility(View.VISIBLE);
_footerBar.view.setVisibility(View.VISIBLE);
imgUrlList = getIntent().getStringArrayListExtra(
GalleryActivity.IMAGE_URL_LIST);
Log.v(TAG, "IMAGE LIST SIZE = " + imgUrlList.size());
position = getIntent().getIntExtra("POSITION", 0);
Log.v(TAG, "IMAGE POSITION = " + position);
swImageRunnable = new SwitchImage();
super.setHeaderTitle(getResources().getString(R.string.gallery));
res = getResources();
lang_PrefStore = new PrefStore();
language = lang_PrefStore.getLanguageChoice(
GalleryImageFullscreen.this, FooterBar.LANG_SELECT);
Log.v("GalleryImageFullscreen language choice", language);
config = getBaseContext().getResources().getConfiguration();
if (!language.equals("")
&& language.equals(config.locale.getLanguage())) {
mLocale = new Locale(language);
Locale.setDefault(mLocale);
config.locale = mLocale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
Log.v("GalleryImageFullscreen onCreate languageset", "in if loop");
}
init();
imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration
.createDefault(GalleryImageFullscreen.this));
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.image_for_empty_url)
.showImageForEmptyUri(R.drawable.image_for_empty_url)
.cacheInMemory().cacheOnDisc()
.bitmapConfig(Bitmap.Config.RGB_565).build();
}// onCreate
private void init() {
loadFormFromResource(R.layout.gallery_image_fullscreen);
imgViewPager = (ViewPager) findViewById(R.id.imgpager);
btnPrev = (ImageButton) findViewById(R.id.btnPrev);
btnPlay = (ImageButton) findViewById(R.id.btnPlay);
btnNext = (ImageButton) findViewById(R.id.btnNext);
if ((imgUrlList != null) && (imgUrlList.size() > 0)) {
imgViewPager.setAdapter(new ImagePagerAdapter(imgUrlList));
imgViewPager.setCurrentItem(position);
}
btnPrev.setOnClickListener(this);
btnPlay.setOnClickListener(this);
btnNext.setOnClickListener(this);
}// init
public void onClick(View v) {
if (v.equals(btnPrev)) {
if (position != 0) {
position--;
imgViewPager.setCurrentItem(position, true);
}
Log.v(TAG, "PREV POSITION = " + position);
}
if (v.equals(btnPlay)) {
if (!isPlaying) {
Log.v(TAG, "in if isPlaying = " + isPlaying);
runTimerTask();
isPlaying = true;
btnPlay.setBackgroundResource(R.drawable.btn_pause);
} else {
Log.v(TAG, "in else isPlaying = " + isPlaying);
isPlaying = false;
myTask.cancel();
myTimer.cancel();
btnPlay.setBackgroundResource(R.drawable.btn_play);
}
}
if (v.equals(btnNext)) {
if (position != (imgUrlList.size() - 1)) {
position++;
imgViewPager.setCurrentItem(position, true);
}
Log.v(TAG, "NEXT POSITION = " + position);
}
}// onClick
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.tie_options_menu, menu);
return true;
}// onCreateOptionsMenu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_Eng:
lang_PrefStore.setLanguageChoice(GalleryImageFullscreen.this,
FooterBar.LANG_SELECT, "en");
mLocale = new Locale("en");
Locale.setDefault(mLocale);
config.locale = mLocale;
getResources().updateConfiguration(config,
getResources().getDisplayMetrics());
isLocaleChanged = true;
Toast.makeText(GalleryImageFullscreen.this, "English",
Toast.LENGTH_SHORT).show();
refreshActivity();
break;
case R.id.menu_German:
lang_PrefStore.setLanguageChoice(GalleryImageFullscreen.this,
FooterBar.LANG_SELECT, "de");
mLocale = new Locale("de");
Locale.setDefault(mLocale);
config.locale = mLocale;
getResources().updateConfiguration(config,
getResources().getDisplayMetrics());
isLocaleChanged = true;
Toast.makeText(GalleryImageFullscreen.this, "German",
Toast.LENGTH_SHORT).show();
refreshActivity();
break;
case R.id.menu_Russian:
lang_PrefStore.setLanguageChoice(GalleryImageFullscreen.this,
FooterBar.LANG_SELECT, "ru");
mLocale = new Locale("ru");
Locale.setDefault(mLocale);
config.locale = mLocale;
getResources().updateConfiguration(config,
getResources().getDisplayMetrics());
isLocaleChanged = true;
Toast.makeText(GalleryImageFullscreen.this, "Russian",
Toast.LENGTH_SHORT).show();
refreshActivity();
break;
}// switch
return super.onOptionsItemSelected(item);
}// onOptionsItemSelected
private class ImagePagerAdapter extends PagerAdapter {
private ArrayList<String> images;
private LayoutInflater inflater;
ImagePagerAdapter(ArrayList<String> images) {
this.images = images;
inflater = getLayoutInflater();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public void finishUpdate(View container) {
}
@Override
public int getCount() {
return images.size();
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
View imageLayout = inflater.inflate(R.layout.item_pager_image,
view, false);
ImageView imageView = (ImageView) imageLayout
.findViewById(R.id.image);
final ProgressBar spinner = (ProgressBar) imageLayout
.findViewById(R.id.loading);
imageLoader.displayImage(images.get(position), imageView, options,
new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
spinner.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
switch (failReason.getType()) {
case IO_ERROR:
break;
case DECODING_ERROR:
break;
case NETWORK_DENIED:
break;
case OUT_OF_MEMORY:
break;
case UNKNOWN:
break;
}
spinner.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri,
View view, Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
}
});
((ViewPager) view).addView(imageLayout, 0);
return imageLayout;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View container) {
}
}
@Override
protected void onPause() {
super.onPause();
if (imageLoader != null) {
imageLoader.stop();
}
}
private void runTimerTask() {
myTask = new MyTimerTask();
myTimer = new Timer();
myTimer.scheduleAtFixedRate(myTask, 0, 3000);
}// runTimerTask
private class SwitchImage implements Runnable {
@Override
public void run() {
if (position != (imgUrlList.size() - 1)) {
Log.v(TAG, "in runnable if");
position++;
imgViewPager.setCurrentItem(position, true);
} else {
Log.v(TAG, "in runnable else");
btnPlay.setBackgroundResource(R.drawable.btn_play);
isPlaying = false;
}
}// run
}// SwitchImage
class MyTimerTask extends TimerTask {
final Handler mHandler = new Handler(Looper.getMainLooper());
public void run() {
mHandler.post(swImageRunnable);
}// run
}// MyTimerTask
@Override
protected void onDestroy() {
if(myTask != null) {
myTask = null;
}
if(myTimer != null) {
myTimer.purge();
}
super.onDestroy();
}
}// GalleryImageFullscreen