代码之家  ›  专栏  ›  技术社区  ›  Candy083

如何实现计时器自动滑入片段内的图像?

  •  1
  • Candy083  · 技术社区  · 7 年前

    我使用了Fragment和CustomSwipeAdapter,我不知道把计时器放在哪里,让图像自动滑动。它是在片段内还是在CustomSwipe Adpater中?

    这是针对片段的:

    public class PrimaryFragment extends Fragment {
    
    
        public static ViewPager viewPager1;
    
        CustomSwipeAdapter adapter;
        public PrimaryFragment() {
            // Required empty public constructor
    
        }
    
       private String[] health ={"Abdominal Disorder","Abrasion","Aches","Anxiety","Bruises","Burns or Scalds","Constipation","Coughs" +
                "","Cramps","Diarrhea","Dizziness","Dyspepsia","Epilepsy","Fever","Gastric Problem" +
                "","High Blood Pressure","Hydrophobia","Tonsillitis"};
    
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
    
    
        }
    
        @Nullable
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
           // return inflater.inflate(R.layout.primary_layout,null);
            //((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("First Aid and Survival Tips");
    
    
    
            View rootView = inflater.inflate(R.layout.primary_layout,container,false);
    
            viewPager1 = (ViewPager) rootView.findViewById(R.id.view_pager);
            adapter = new CustomSwipeAdapter(this.getActivity());
            viewPager1.setAdapter(adapter);
    
    
            ListView lv = (ListView) rootView.findViewById(R.id.oneListView);
            ArrayAdapter adapter = new ArrayAdapter(this.getActivity(),android.R.layout.simple_list_item_1,health);
            lv.setAdapter(adapter);
    
    
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                    // Toast.makeText(getActivity(),health[position],Toast.LENGTH_SHORT).show();
                    if(position == 0) {
                        Intent intent = new Intent(view.getContext(), abdominal.class);
                        startActivity(intent);
                    }
                    if(position == 1) {
                        Intent intent = new Intent(view.getContext(), abrasion.class);
                        startActivity(intent);
                    }
                    if(position == 2) {
                        Intent intent = new Intent(view.getContext(), aches.class);
                        startActivity(intent);
                    }
                    if(position == 3) {
                        Intent intent = new Intent(view.getContext(), allergies.class);
                        startActivity(intent);
                    }
                    if(position == 4) {
                        Intent intent = new Intent(view.getContext(), bruises.class);
                        startActivity(intent);
                    }
                    if(position == 5) {
                        Intent intent = new Intent(view.getContext(), burns.class);
                        startActivity(intent);
                    }
                    if(position == 6) {
                        Intent intent = new Intent(view.getContext(), constipation.class);
                        startActivity(intent);
                    }
                    if(position == 7) {
                        Intent intent = new Intent(view.getContext(), coughs.class);
                        startActivity(intent);
                    }
                    if(position == 8) {
                        Intent intent = new Intent(view.getContext(), cramps.class);
                        startActivity(intent);
                    }
                    if(position == 9) {
                        Intent intent = new Intent(view.getContext(), diarrhea.class);
                        startActivity(intent);
                    }
                   // if(position == 10) {
                   //     Intent intent = new Intent(view.getContext(), digestive.class);
                     //   startActivity(intent);
                  //  }
                    if(position == 10) {
                        Intent intent = new Intent(view.getContext(), dizziness.class);
                        startActivity(intent);
                    }
                    if(position == 11) {
                        Intent intent = new Intent(view.getContext(), dyspepsia.class);
                        startActivity(intent);
                    }
                    if(position == 12) {
                        Intent intent = new Intent(view.getContext(), epilepsy.class);
                        startActivity(intent);
                    }
                    if(position == 13) {
                        Intent intent = new Intent(view.getContext(), fever.class);
                        startActivity(intent);
                    }
                    if(position == 14) {
                        Intent intent = new Intent(view.getContext(), gastric.class);
                        startActivity(intent);
                    }
                    if(position == 15) {
                        Intent intent = new Intent(view.getContext(), highblood.class);
                        startActivity(intent);
                    }
                    if(position == 16) {
                        Intent intent = new Intent(view.getContext(), hydrophobia.class);
                        startActivity(intent);
                    }
                    if(position == 17) {
                        Intent intent = new Intent(view.getContext(), tonsilitis.class);
                        startActivity(intent);
                    }
                }
            });
            return rootView;
        }}
    

     public class CustomSwipeAdapter extends PagerAdapter {
        private int[] image_resource = {R.drawable.one, R.drawable.two, R.drawable.three};
        private Context ctx;
        private LayoutInflater layoutInflater;
    
        public CustomSwipeAdapter(Context ctx) {
            this.ctx = ctx;
        }
    
        @Override
        public int getCount() {
    
            return image_resource.length;
        }
    
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return (view == (LinearLayout)object);
        }
    
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View item_view = layoutInflater.inflate(R.layout.swipe_layout, container, false);
            ImageView imageview = (ImageView) item_view.findViewById(R.id.image_view);
            /*TextView textView = (TextView)  item_view.findViewById(R.id.image_count);*/
            imageview.setImageResource(image_resource[position]);
           /* textView.setText("" + position);*/
            container.addView(item_view);
            return item_view;
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((LinearLayout)object);
        }
    
    }
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Keizer    7 年前
    Handler h = new Handler();
    int delay = 15000; //1 second
    Runnable runnable;
    private int[] pagerIndex = {-1};
    @Override
    public void onStart() {
    
    
        h.postDelayed(new Runnable() {
            public void run() {
               pagerIndex[0]++;
        if (pagerIndex[0] >= adapter.getCount()) {
            pagerIndex[0] = 0;
        }
    
        viewPager.setCurrentItem(pagerIndex[0]);
                runnable=this;
    
                h.postDelayed(runnable, delay);
            }
        }
        , delay);
    
        super.onStart();
    }
    
        2
  •  1
  •   Neeraj    7 年前

    你可以在自己身上开始一项定时任务 Fragment . 尚未验证此代码,但应该可以正常工作。 创建刷卡任务:

    final long delay = 2000;
    Handler handler = new Handler();
    private int[] pagerIndex = {-1};
    private Runnable swipeTask = new Runnable() {
        @Override
        public void run() {
    
            pagerIndex[0]++;
            if (pagerIndex[0] >= adapter.getCount()) {
                pagerIndex[0] = 0;
            }
    
            viewPager.setCurrentItem(pagerIndex[0]);
            handler.postDelayed(this, delay);
        }
    };
    

    onCreateView() ,在设置了viewPager、适配器等之后,

    task.run();
    
        3
  •  0
  •   jhashane    5 年前
    private int currentPage = 0;
    final long DELAY = 1000;//delay in milliseconds before auto sliding starts.
    final long PERIOD = 4000; //time in milliseconds between sliding.
    
    private void autoScroll(){
        final Handler handler = new Handler();
        final Runnable Update = new Runnable() {
            public void run() {
                if (currentPage == YourImageList.size()) {
                    currentPage = 0;
                }
                viewPager.setCurrentItem(currentPage++, true);
            }
        };
    
        timer = new Timer(); // creating a new thread
        timer .schedule(new TimerTask() { // task to be scheduled
    
            @Override
            public void run() {
                handler.post(Update);
            }
        }, DELAY_MS, PERIOD_MS);
    }
    

    在片段的onCreateView()中调用autoScroll(), 已设置视图寻呼机适配器。

    viewPager.setAdapter(ViewPagerAdapter)
    autoScroll()
    

    如果必须在片段之间切换,请记住 计时器输入 onDetach()

     @Override
    public void onDetach() {
        super.onDetach();
        if(timer != null) {
           timer.cancel();
            timer = null;
        }
    }
    

    希望这能帮助别人。因为我个人在移动到另一个片段并返回到同一个片段时遇到滑动问题,因为我在移动到另一个片段之前没有取消计时器。