使用 viewpager 单击图像时延迟滑动操作 android
delay slide action when an image is clicked using viewpager android
我创建了一个幻灯片,其中禁用了滑动屏幕的默认滑动操作。相反,当我单击图像时,幻灯片会执行。但是我想在单击图像后将幻灯片延迟 t 毫秒。点击动作的方法是onClickSlideDown。
viewpagerclass如下:
public class slidescreen extends ActionBarActivity implements Animation.AnimationListener {
//Declare variables
ViewPager viewPager;
PagerAdapter adapter;
int[] background;
int[] icon;
String[] title;
String[] title_2;
String[] description;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.slidescreenmain);
//Generate sample data
background = new int[]{R.mipmap.bg1, R.mipmap.bg2, R.mipmap.bg3, R.mipmap.bg4, R.mipmap.bg5, R.mipmap.bg6,
R.mipmap.bg7, R.mipmap.bg8, R.mipmap.bg9, R.mipmap.bg10, R.mipmap.bg11, R.mipmap.bg12};
icon = new int[]{R.mipmap.im1, R.mipmap.im2, R.mipmap.im3, R.mipmap.im4, R.mipmap.im5,
R.mipmap.im6, R.mipmap.im7, R.mipmap.im8, R.mipmap.im9, R.mipmap.im10, R.mipmap.im11, R.mipmap.im12};
title = new String[]{"ALTA RESISTENCIA A", "ALTA RESISTENCIA", "ALTAMENTE", "RESISTENCIA A", "MATERIAL", "ALTA RESISTENCIA",
"RESISTENCIA AL", "RESISTENCIA", "ESTABILIDAD", "ESTABILIDAD", "RESISTENCIA A", "NULA ABSORCIÓN"};
title_2 = new String[]{"LOS RAYOS UV", "AL FUEGO Y AL CALOR", "RESISTENTE AL RAYADO", "LAS MANCHAS", "INCOMBUSTIBLE", "A LA HIDRÓLISIS",
"HIELO Y DESHIELO", "MECÁNICA", "DIMENSIONAL", "DEL COLOR", "LA ABRASIÓN", "DEL AGUA"};
description = new String[]{"Por naturaleza, es capaz del repeler\n" + "líquidos y gases para que no penetren en\n" +
"la superficie. De este modo, el\n" + "mantenimiento de la superficie es mínimo\n" +
"y más fácil de limpiar."};
// Locate the ViewPager in viewpager_main.xml
viewPager = (ViewPager) findViewById(R.id.pager);
// Pass results to ViewPagerAdapter Class
adapter = new ViewPagerAdapter(slidescreen.this, background, icon, title, title_2, description);
// Binds the Adapter to the ViewPager
viewPager.setAdapter(adapter);
getSupportActionBar().hide();
}
public void onClickSlideDown(View view) {
Animation slideback;
ImageView iconimage, whitebox;
TextView titletext, title_2text, descriptiontext;
titletext = (TextView)findViewById(R.id.title);
title_2text = (TextView)findViewById(R.id.title_2);
descriptiontext = (TextView)findViewById(R.id.description);
iconimage = (ImageView)findViewById(R.id.icon);
whitebox = (ImageView)findViewById(R.id.whitebox);
slideback = AnimationUtils.loadAnimation(this, R.anim.whiteboxanimback);
slideback.setAnimationListener(this);
whitebox.startAnimation(slideback);
iconimage.startAnimation(slideback);
titletext.startAnimation(slideback);
title_2text.startAnimation(slideback);
descriptiontext.startAnimation(slideback);
if (viewPager.getCurrentItem() < viewPager.getAdapter().getCount()) {
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
} else {
Intent i1 = new Intent(this, glass_3.class);
startActivity(i1);
}
谢谢:)
试试这个。在您的 onClickSlideDown 方法中添加此代码。
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}catch(InterruptedException e){
e.printStackTrace();
}finally
{
//Your entire code of onClickSlideDown method
}
}
};
timer.start();
希望这会奏效并将幻灯片延迟 2000 毫秒。
更新:如果意图中的关键字“this”导致错误,请尝试使用 getApplicationContext() 而不是意图中的 this 关键字。
感谢@Ish 的回答,但您不能在任何其他线程上执行 ui 操作...
所以处理程序来拯救,默认构造函数使用主线程消息队列循环对象
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//TODO: Write your code here
}
}, delayinMiils);
但是当你添加延迟时,你正在玩主线程的上下文泄漏......为了避免任何类型的上下文泄漏,请参考下面的实现
private final MyHandler mHandler = new MyHandler(this);
/**
* Instances of anonymous classes do not hold an implicit
* reference to their outer class when they are "static".
*/
private static final Runnable sRunnable = new Runnable() {
@Override
public void run() { /* ... */ }
};
// Post a message and delay its execution for 10 minutes.
mHandler.postDelayed(sRunnable, 1000 * 60 * 10);
我创建了一个幻灯片,其中禁用了滑动屏幕的默认滑动操作。相反,当我单击图像时,幻灯片会执行。但是我想在单击图像后将幻灯片延迟 t 毫秒。点击动作的方法是onClickSlideDown。 viewpagerclass如下:
public class slidescreen extends ActionBarActivity implements Animation.AnimationListener {
//Declare variables
ViewPager viewPager;
PagerAdapter adapter;
int[] background;
int[] icon;
String[] title;
String[] title_2;
String[] description;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.slidescreenmain);
//Generate sample data
background = new int[]{R.mipmap.bg1, R.mipmap.bg2, R.mipmap.bg3, R.mipmap.bg4, R.mipmap.bg5, R.mipmap.bg6,
R.mipmap.bg7, R.mipmap.bg8, R.mipmap.bg9, R.mipmap.bg10, R.mipmap.bg11, R.mipmap.bg12};
icon = new int[]{R.mipmap.im1, R.mipmap.im2, R.mipmap.im3, R.mipmap.im4, R.mipmap.im5,
R.mipmap.im6, R.mipmap.im7, R.mipmap.im8, R.mipmap.im9, R.mipmap.im10, R.mipmap.im11, R.mipmap.im12};
title = new String[]{"ALTA RESISTENCIA A", "ALTA RESISTENCIA", "ALTAMENTE", "RESISTENCIA A", "MATERIAL", "ALTA RESISTENCIA",
"RESISTENCIA AL", "RESISTENCIA", "ESTABILIDAD", "ESTABILIDAD", "RESISTENCIA A", "NULA ABSORCIÓN"};
title_2 = new String[]{"LOS RAYOS UV", "AL FUEGO Y AL CALOR", "RESISTENTE AL RAYADO", "LAS MANCHAS", "INCOMBUSTIBLE", "A LA HIDRÓLISIS",
"HIELO Y DESHIELO", "MECÁNICA", "DIMENSIONAL", "DEL COLOR", "LA ABRASIÓN", "DEL AGUA"};
description = new String[]{"Por naturaleza, es capaz del repeler\n" + "líquidos y gases para que no penetren en\n" +
"la superficie. De este modo, el\n" + "mantenimiento de la superficie es mínimo\n" +
"y más fácil de limpiar."};
// Locate the ViewPager in viewpager_main.xml
viewPager = (ViewPager) findViewById(R.id.pager);
// Pass results to ViewPagerAdapter Class
adapter = new ViewPagerAdapter(slidescreen.this, background, icon, title, title_2, description);
// Binds the Adapter to the ViewPager
viewPager.setAdapter(adapter);
getSupportActionBar().hide();
}
public void onClickSlideDown(View view) {
Animation slideback;
ImageView iconimage, whitebox;
TextView titletext, title_2text, descriptiontext;
titletext = (TextView)findViewById(R.id.title);
title_2text = (TextView)findViewById(R.id.title_2);
descriptiontext = (TextView)findViewById(R.id.description);
iconimage = (ImageView)findViewById(R.id.icon);
whitebox = (ImageView)findViewById(R.id.whitebox);
slideback = AnimationUtils.loadAnimation(this, R.anim.whiteboxanimback);
slideback.setAnimationListener(this);
whitebox.startAnimation(slideback);
iconimage.startAnimation(slideback);
titletext.startAnimation(slideback);
title_2text.startAnimation(slideback);
descriptiontext.startAnimation(slideback);
if (viewPager.getCurrentItem() < viewPager.getAdapter().getCount()) {
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
} else {
Intent i1 = new Intent(this, glass_3.class);
startActivity(i1);
}
谢谢:)
试试这个。在您的 onClickSlideDown 方法中添加此代码。
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}catch(InterruptedException e){
e.printStackTrace();
}finally
{
//Your entire code of onClickSlideDown method
}
}
};
timer.start();
希望这会奏效并将幻灯片延迟 2000 毫秒。
更新:如果意图中的关键字“this”导致错误,请尝试使用 getApplicationContext() 而不是意图中的 this 关键字。
感谢@Ish 的回答,但您不能在任何其他线程上执行 ui 操作...
所以处理程序来拯救,默认构造函数使用主线程消息队列循环对象
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//TODO: Write your code here
}
}, delayinMiils);
但是当你添加延迟时,你正在玩主线程的上下文泄漏......为了避免任何类型的上下文泄漏,请参考下面的实现
private final MyHandler mHandler = new MyHandler(this);
/**
* Instances of anonymous classes do not hold an implicit
* reference to their outer class when they are "static".
*/
private static final Runnable sRunnable = new Runnable() {
@Override
public void run() { /* ... */ }
};
// Post a message and delay its execution for 10 minutes.
mHandler.postDelayed(sRunnable, 1000 * 60 * 10);