文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android开发中使用ViewPager实现一个轮翻图效果

2023-05-31 13:37

关注

Android开发中使用ViewPager实现一个轮翻图效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

具体方法如下:

import java.util.ArrayList; import java.util.List;  import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView;  public class MainActivity extends Activity implements OnPageChangeListener {    protected static final String TAG = "MainActivity";  private List<ImageView> imageViewList;  private ViewPager mViewPager;  private final int[] imageResIDs = {    R.drawable.a,    R.drawable.b,    R.drawable.c,    R.drawable.d,    R.drawable.e  };  private final String[] imageDescriptions = {    "巩俐不低俗,我就不能低俗",    "扑树又回来啦!再唱经典老歌引万人大合唱",    "揭秘北京电影如何升级",    "乐视网TV版大派送",    "热血屌丝的反杀"  };  private TextView tvImageDescription; // 图片描述  private LinearLayout llPointGroup;  // 点控件的组  private int previousPosition = 0;  // viewpager选中的前一个position  private boolean isStop = false; // 控制循环的子线程是否停止    private Handler handler = new Handler(){    @Override   public void handleMessage(Message msg) {    super.handleMessage(msg);        mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);   }  };   @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);      initView();      new Thread(new Runnable() {     @Override    public void run() {     // 每两秒钟向主线程发送一条消息, 切换viewpager的界面     while(!isStop) {      SystemClock.sleep(2000);            handler.sendEmptyMessage(0);     }     Log.i(TAG, "循环线程停止了");    }}).start();  }    @Override  protected void onDestroy() {   isStop = true;   super.onDestroy();  }   private void initView() {   mViewPager = (ViewPager) findViewById(R.id.viewpager);   llPointGroup = (LinearLayout) findViewById(R.id.ll_point_group);   tvImageDescription = (TextView) findViewById(R.id.tv_image_description);      imageViewList = new ArrayList<ImageView>();      ImageView iv;   View pointView;   LayoutParams params;   for (int i = 0; i < imageResIDs.length; i++) {    iv = new ImageView(this);    iv.setBackgroundResource(imageResIDs[i]);    imageViewList.add(iv);        // 根据图片添加点    pointView = new View(this);    params = new LayoutParams(5, 5);    params.leftMargin = 5;    pointView.setLayoutParams(params);    pointView.setEnabled(false);    pointView.setBackgroundResource(R.drawable.point_bg);    llPointGroup.addView(pointView);   }      MyPagerAdapter mAdapter = new MyPagerAdapter();   mViewPager.setAdapter(mAdapter);   mViewPager.setOnPageChangeListener(this);      int item = (Integer.MAX_VALUE / 2) - ((Integer.MAX_VALUE / 2) % imageViewList.size());   mViewPager.setCurrentItem(item);  // 设置当前选中的item的position      tvImageDescription.setText(imageDescriptions[previousPosition]);   llPointGroup.getChildAt(previousPosition).setEnabled(true); // 第一点被选中  }      class MyPagerAdapter extends PagerAdapter {    @Override   public int getCount() {    return Integer.MAX_VALUE;   }       @Override   public boolean isViewFromObject(View arg0, Object arg1) {    return arg0 == arg1;   }       @Override   public void destroyItem(ViewGroup container, int position, Object object) {    // 移除掉指定position的对象    mViewPager.removeView(imageViewList.get(position % imageViewList.size()));   }       @Override   public Object instantiateItem(ViewGroup container, int position) {    // 添加指定position的对象    mViewPager.addView(imageViewList.get(position % imageViewList.size()));    return imageViewList.get(position % imageViewList.size());   }  }    @Override  public void onPageScrollStateChanged(int arg0) {   // TODO Auto-generated method stub     }   @Override  public void onPageScrolled(int arg0, float arg1, int arg2) {   // TODO Auto-generated method stub     }     @Override  public void onPageSelected(int position) {   tvImageDescription.setText(imageDescriptions[position % imageViewList.size()]);   llPointGroup.getChildAt(position % imageViewList.size()).setEnabled(true);   llPointGroup.getChildAt(previousPosition).setEnabled(false);      previousPosition = position % imageViewList.size();  } } 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯