java - 添加计时器并设置大小到 viewpager

标签 java android eclipse slider

  1. 我的主要 Activity 中有 viewpager,我需要为其设置计时器 自动更换幻灯片。
  2. 我需要为我的图像(任何分辨率)设置默认大小和位置,以便任何屏幕显示我的顶部屏幕的三分之一,如下所示 Preview .

主 Activity .java

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Image slide show 

        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        ImageAdapter adapter = new ImageAdapter(this);
        viewPager.setAdapter(adapter);

         // End Image slide show


}

ImageAdapter.java

package com.example.gallery;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

public class ImageAdapter extends PagerAdapter {
    Context context;
    private int[] GalImages = new int[] {
        R.drawable.one,
        R.drawable.two,
        R.drawable.three
    };
    ImageAdapter(Context context){
        this.context=context;
    }
    @Override
    public int getCount() {
      return GalImages.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
      return view == ((ImageView) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
      ImageView imageView = new ImageView(context);
      int padding = context.getResources().getDimensionPixelSize(R.dimen.padding_medium);
      imageView.setPadding(padding, padding, padding, padding);
      imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
      imageView.setImageResource(GalImages[position]);
      ((ViewPager) container).addView(imageView, 0);
      return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      ((ViewPager) container).removeView((ImageView) object);
    }
  }

最佳答案

对于定时器, 在主要 Activity 中,在 viewPager.setAdapter(adapter) 之后添加这些;

myPager.setCurrentItem(0);
pagerAdapter.setTimer(myPager,7);

在寻呼机适配器类中

//gloabals
final Handler handler = new Handler();
public Timer swipeTimer ;


 /** 
 *  this function swipes pages left to right for every 7 seconds
 * @param myPager its viewpager.
 * @param time as second, for 7 second enter 7
 *
 */
public void setTimer(final ViewPager myPager, int time){
     final int size =objects.size();


        final Runnable Update = new Runnable() {
            int NUM_PAGES =size;
            int currentPage = 0 ;
            public void run() {
                if (currentPage == NUM_PAGES ) {
                    currentPage = 0;
                }
                myPager.setCurrentItem(currentPage++, true);
            }
        };

        swipeTimer = new Timer();
        swipeTimer.schedule(new TimerTask() {

            @Override
            public void run() {
                handler.post(Update);
            }
        }, 1000, time*1000);
}

或者你可以用这个

/**
 * this function swipes pages left to right for every 7 seconds
 * @param myPager
 * @param time
 * @param numPages we recommend that it should be as much as much objects.size()
 * @param curPage we recommend that it should start from 0
 * 
 */
public void setTimer(final ViewPager myPager, int time, final int numPages, final int curPage){

        final Runnable Update = new Runnable() {
            int NUM_PAGES =numPages;
            int currentPage = curPage ;
            public void run() {
                if (currentPage == NUM_PAGES ) {
                    currentPage = 0;
                }
                myPager.setCurrentItem(currentPage++, true);
            }
        };

        swipeTimer = new Timer();
        swipeTimer.schedule(new TimerTask() {

            @Override
            public void run() {
                handler.post(Update);
            }
        }, 1000, time*1000);

}

这是为了停止定时器

 /**
 * its kills runnable
 */
public void stopTimer(){
    //handler.removeCallbacks(null);
    swipeTimer.cancel();
}

关于java - 添加计时器并设置大小到 viewpager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23511045/

相关文章:

java - 为什么模板没有呈现正确的值?

c# - sqlite3 异步插入和更新

Android - 支付方式

安卓:意向服务。在哪里保存文件?

android - 从设备上的 eclipse 启动 android 应用程序非常慢

java - GWT 2.6.1 拒绝在 Eclipse Luna 中启动开发模式

java - 如何根据不同对象的返回结果创建对象的强制类型转换

java - 在 Java 中显示两个不同 XML 文件的结果

java - 打包java项目

java - 如何查找括号索引indexOf - 混淆、Eclipse bug 或功能