-
ScrollView的监听器——setOnTouchLiatener的使用 应用案例:判断 ScrollView 何时滑动到底部 类似于 ListView的下拉更新,但这里使用的是 TextView+ScrollView。 监听事件中含有 onTouch()方法,和上一章的 Flipper的 onTouchEvent类似。 ----------------------------------- getScrollY()----滚动条滑动的距离 getMeasuredHeight() 视图的真实高度(隐藏部分+显示部分) getHeight() 视图显示部分的高度 -------------------------------------- 摘自评论区: <ScrollView>里边只能有一个元素,如果使用多个元素,需要把元素都放在<LinearLayout>等布局标签中,然后把布局标签在放在<ScrollView>否则放多个元素会报错。 -------------------------------------- 摘自评论区: 那个滚动到底部或顶部的判断,放在MotionEvent.ACTION_MOVE不合适,那里会执行很多次操作;放在MotionEvent.ACTION_UP比较适合,手指松开再去执行。查看全部
-
switch (event.getAction()){ case MotionEvent.ACTION_MOVE: /** * 1.getScrollY()----滚动条滑动的距离 * 2.getMeasuredHeight() * 3.getHeight() */ //顶部状态 if(scrollView.getScrollY()<=0){ Log.i("Main","顶部"); } //底部状态 //scrollView.getChild(0) 表示 scrollView的第一个子View,这里就是TextView。 //TextView的总高度=屏幕的高度+滚动条的最大滑动距离 //这里的条件是TextView的总高度<=屏幕的高度+滚动条的滑动距离,一旦达成条件,就说明滚动条已经达到最大距离,也就是到底了。 if(scrollView.getChildAt(0).getMeasuredHeight()<=scrollView.getHeight()+scrollView.getScrollY()){ Log.i("Main","滑动到底部"); Log.i("Main","scrollView.getChildAt(0).getMeasuredHeight()="+scrollView.getChildAt(0).getMeasuredHeight()+" scrollView.getHeight()="+scrollView.getHeight()+ "scrollView.getScrollY()="+scrollView.getScrollY()); textView.append(getResources().getString(R.string.content2)); } break; }查看全部
-
ScrollView 滚动视图 滚动视图是指当前拥有很多内容,屏幕显示不完整时,需要通过滚动来显示完整的视图。 ----------------------------- ScrollBar分两种: HorizontalScrollView: 水平滚动视图 ScrollView: 垂直滚动视图 ----------------------------- 隐藏滚动条有两种方式: 一种是在标签中设置: android:scrollbars="none" 另一种是在代码中设置: setHorizontalScrollBarEnable(false); 隐藏横向ScrollView setVerticalScrollBarEnable(false); 隐藏纵向ScrollView查看全部
-
布局文件没有看完查看全部
-
支持手势滑动的 ViewFlipper 在 MainActivity 重写方法 onTouchEvent(MotionEvent event): switch (event.getAction()){//手势滑动分为几种情况 //手指点到屏幕上(手指落下) case MotionEvent.ACTION_DOWN: startX=event.getX();//获得横向坐标X的值,作为起始坐标。 break; //手指在屏幕上滑动,需要判断是向左还是向右 case MotionEvent.ACTION_MOVE: //向右滑(坐标大于startX)是看前一页 if(event.getX()-startX >100){//设置差值大于100,是为了过滤掉微小的滑动 flipper.setInAnimation(this,R.anim.left_in); flipper.setOutAnimation(this,R.anim.left_out); flipper.showPrevious();//显示前一页 } //向左滑,看后一页 else if(startX-event.getX()>100){ flipper.setInAnimation(this,R.anim.right_in); flipper.setOutAnimation(this,R.anim.right_out); flipper.showNext();//显示后一页 } break; //手指离开屏幕(手指抬起) case MotionEvent.ACTION_UP: break; } 最后,别忘了将上节课的自动轮播的代码注释掉。这样就实现手动滑动图片的效果。查看全部
-
实现动画效果的步骤 1. 创建文件夹anim,放置实现动画效果的xml文件。在drawable中放置图片资源。 2. 在 main.xml中放置<ViewFlipper> 3. 在MainActivity中创建 int数组,放置图片id。 4. 初始化ViewFlipper,动态导入子View: for (int i=0;i<resId.length;i++){ flipper.addView(getImageView(resId[i])); } 这里自定义了方法 private ImageView getImageView(int resId){ ImageView image = new ImageView(this); //image.setImageResource(resId);//不采取此方法的原因:ImageView的宽高完全取决于图片的宽高,不符合“全屏展示”的要求 image.setBackgroundResource(resId);//background可以铺满整个屏幕 return image; } 5. 设置动画效果 //设置切换的动画效果 flipper.setInAnimation(this,R.anim.left_in);//Animation:动画。这里说是页面进入的动画(InAnimation)采用从左进入。 flipper.setOutAnimation(this,R.anim.left_out); flipper.setFlipInterval(3000);//切换的时间间隔,单位毫秒 flipper.startFlipping();//开启动画查看全部
-
使用ViewFlipper实现屏幕切换动画效果。 ViewFlipper和ViewPager一样,都是Android自带的一个多页面管理控件,不同的是ViewPager是手动切换页面,而ViewFlipper可以实现子界面的自动切换。只需设置切换时间和切换的动画效果,ViewFlipper里面的视图就会自动循环播放。 ------------------------ 为ViewFlipper添加View (1)静态导入:在layout布局文件中直接导入,不需要写额外的Java代码,缺点:直接写死,非常不灵活,所以不推荐使用。 (2)动态导入:addView()方法: flipper=(ViewFlipper)findViewById(R.i.flipper); flipper.addView(getImageView(R.drawable.pic1)); flipper.addView(getImageView(R.drawable.pic2)); --------------------------------- ViewFlipper常用的方法: 1)、SetInAnimation:设置View进入屏幕时候使用的动画 2)、setOutAnimation:设置View退出屏幕时候使用的动画 3)、showNext:调用该函数来显示ViewFlipper里面的下一个View 4)、showPrevious:调用该函数来显示ViewFlipper里面的上一个View 5)、setFilpInterval:设置View之间切换的时间间隔 6)、startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行 7)、stopFlipping:停止View切换查看全部
-
实际工作中,经常使用ViewPager+Fragment的形式,因为Fragment的生命周期是比较全面的。而不使用ViewPager+View,因为View的创建和销毁的逻辑过程没有像Fragment那么好控制。 如果只是图方便,只是做展示,没有太多事务处理的话,可以使用View。 如果业务逻辑比较复杂,推荐使用 ViewPager+Fragment 组合。查看全部
-
监听器的使用 1. mainActivity实现接口 OnPageChangeListener,并重写3个方法。 2. 3个方法相对重要的是 onPageSelected(int position),这里只重写它,主要是返回当前页面的位置: @Override public void onPageSelected(int position) { Toast.makeText(this, "当前是第"+(position+1)+"个页面 ", Toast.LENGTH_SHORT).show();//注意:position是从0开始计算的。 } 3. ViewPager加载监听器 pager.setOnPageChangeListener(this);查看全部
-
FragmentPagerAdapter 不像 PagerAdapter 那样三个三个地加载页面,而是一次性全部加载,所以不需要构建页卡和销毁页卡。所以,如果ViewPager比较少的话,可以使用 FragmentPagerAdapter。另外还有 FragmentStatePagerAdapter,拥有动态销毁的功能。 --------------------------------------------------------- FragmentStatePagerAdapter的使用,观察页面动态销毁的效果。 1. 复制前面写好的MyFragmentpagerAdapter ,命名为 MyFragmentpagerAdapter2; 2. 将继承的父类改为FragmentStatePagerAdapter; 3. 添加两个重写方法:instantiateItem() 和 destroyItem(); 4. 在 Fragment4.java中重写onDestroy(): @Override public void onDestroy() { super.onDestroy(); Log.i("main", "Fragment4被销毁了"); } 5. 在 MainActivity中创建FragmentStatePagerAdapter适配器: MyFragmentPagerAdapter2 adapter3 = new MyFragmentPagerAdapter2(getSupportFragmentManager(),fragList,titleList); 6. ViewPager加载适配器 pager.setAdapter(adapter3);查看全部
-
适配器FragmentPagerAdaper 1. 创建 Fragment1~Fragment4,都继承 Fragment,重写onCreateView(),分别使用 inflater.inflate(R.layout.viewX,container,false);将布局文件 viewX.xml(X=1~4)转变为View对象。 2. 在 MainActivity创建 List<Fragment> fragList; 作为ViewPager的数据源。 3. 初始化 fragment 并添加 Fragment 对象: fragList = new ArrayList<Fragment>(); fragList.add(new Fragment1()); fragList.add(new Fragment2()); fragList.add(new Fragment3()); fragList.add(new Fragment4()); 注意 add() 里面是直接新建了 Fragment 对象。 4. 创建 FragmentPagerAdapter 适配器:创建一个类 MyFragmentPagerAdapter ,继承FragmentPagerAdapter。 重写构造方法(如图),使之可以传递参数。 5. 创建适配器。在MainActivity中创建适配器 MyFragmentPagerAdapter 的对象 adapter2。MyFragmentPagerAdapter()需要传递3个参数: 第一个参数是 FragmentManager ,我们需要让 MainActivity继承 FragmentActivity,然后第一个参写做 getSupportFragmentManager(); 第二个参数:fragList; 第三个参数:titleList; 6. ViewPager加载适配器 pager.setAdapter(adapter2);查看全部
-
ViewPager设置标题 1. 在 main.xml文件中的ViewPager中添加控件<android.support.v4.view.PagerTabStrip>; 2. 在 MainActivity中创建 PagerTabStrip 对象tab; 3. 注意标题也需要存放在List集合里,所以要声明集合 List<String> titleList; 4. 为ViewPager页卡设置标题 实例化标题集合: titleList = new ArrayList<String>(); 添加标题:titleList.add("第一页"); titleList.add("第一页"); 等等。。。 5. 为了将标题集合传给ViewPager,需要改写适配器的构造方法,向构造方法添加参数List<String>; private List<String> titleList; //有参构造方法 public MyPagerAdapter(List<View>viewList,List<String> titleList){ this.viewList=viewList; this.titleList=titleList; } 6. 在适配器类中重写方法 getPageTitle(): @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } 7. 在 MianActivity 加载适配器 MyPagerAdapter adapter = new MyPagerAdapter(viewList,titleList); 8.可以为为ViewPager设置属性,显得更美观(在此之前要初始化tab):tab.setBackgroundColor(Color.RED) ------------------------------- 如果在 main.xml同时写上 <android.support.v4.view.PagerTabStrip> 和 <android.support.v4.view.PagerTitleStrip>,则前者会失效。查看全部
-
在MainActivity中初始化 ViewPager、创建PagerAdapter适配器、ViewPager加载适配器。查看全部
-
view 对象对应的适配器是 PagerAdapter,需要新建一个类去继承PagerAdapter。这一点和之前学的适配器不一样。我们要在MainActivity中用这个类去创建适配器对象。 -------------------------------------------------------------------- 该类需要继承 4 个方法(默认是2个,需要再扩展2个)为的是让ViewPager可以自己去管理自己的数据源,这里也就是View对象。 1. getCount(): 返回页卡的数量; 2. isViewFromObject(View view, Object object): 判断view是否来自对象 3. instantiateItem(ViewGroup container, int position):实例化一个页卡 4. destroyItem(ViewGroup container, int position, Object object):销毁一个页卡 然后需要构建有参的构造方法: private List<View>viewList; //有参构造方法 public MyPagerAdapter(List<View>viewList){ this.viewList=viewList; } ------------------------------------------------------- ViewPager做管理的时候,一般是三个三个地加载,例如当前显示的是view2,它前面是 view1、下一个是 view3,这三个页卡同时加载在一个界面中,而view4还没有加载。继续向右滑动,view4被实例化,显示的是view3,前面是view2,后面是view4,而 view1 则被移除掉了。查看全部
-
使用ViewPager实现导航 ViewPager可以使视图左右滑动 ViewPager的声明:<android.support.v4.view.ViewPager> 这么写的原因是为了解决版本兼容性问题。其中android.support.v4是谷歌为了解决版本系统碎片化的问题所提供的兼容的包,主要解决向下兼容的问题,能让高版本的控件在低版本的控件中使用 --------------------------- 将Layout布局转换为View对象 (1) LayoutInflater lf = getLayoutInflater().from(this); (2) View.inflater( context, resource, root ) 那么,ViewPager到底是什么东西呢?我们可以把ViewPager视作一个容器,里面可以放置两种东西,一种是View对象,一种是Fragment。 例如,微信顶部导航包括“聊天”、“发现”、“通讯录”,这就相当于放置了3个View,每个View对应着布局文件。ViewPager的数据源便相当于View对象或Fragment对象的集合。 ---------------------------- Adapter的配置 1. PagerAdaper 数据源:List<View> 2. FragmentPagerAdapter 数据源:List<Fragment> 3. FragmentStatePagerAdapter 数据源:List<Fragment> 准备数据源 --> 准备适配器 -->加载适配器 适配器分为两类,分别对应View的集合和Fragment集合查看全部
举报
0/150
提交
取消