使用viewpager android单击图像时延迟幻灯片操作

时间:2015-06-14 16:49:55

标签: android android-viewpager android-animation

我创建了一个幻灯片,其中我已禁用默认滑动操作以滑动屏幕。相反,当我单击图像时幻灯片执行。但是我希望在点击图像后延迟滑动达t毫秒。点击操作的方法是onClickSlideDown。 viewpager类如下:

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);
    }

谢谢:)

2 个答案:

答案 0 :(得分:0)

试一试。在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''in intent导致错误,请尝试在intent中使用getApplicationContext()而不是this关键字。

答案 1 :(得分:0)

感谢@Ish的答案,但你不能在任何其他线程上进行ui操作......

所以处理程序来救援,默认构造函数使用主线程Message queue looper object

    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);