Android学习心得第四课
来源:互联网 发布:淘宝代购比旗舰店便宜 编辑:程序博客网 时间:2024/05/17 02:05
算算和上一次的博客又隔了一个星期了,最近这一周效率不是太高,本来一两天就可以完成的任务硬生生的花了快一个星期才搞完,然而发现前面学的东西又开始遗忘了,下面还是先来把我这几天学的东西给记录一下。
第一部分 PagerAdapter和fragmentAdapter
首先是关于PagerAdapter,PagerAdapter是ViewPager的适配器,通过该方法,可以实现控件的滑动效果。这里突然发现好像从来没有仔细的解释过适配器的概念,下面做一个简短的说明。
适配器:把复杂的数据(数组,链表,数据库,集合)填充在指定的视图上。数据适配器是连接数据源和视图界面的桥梁。他一般的实现过程是:新建适配器—添加数据源到适配器—视图加载适配器。
下面对PagerAdapter的讲解在代码中进行诠释:
public class myPagerAdapter extends PagerAdapter{ private List<View>viewList; private List<String>titleList; public myPagerAdapter(List<View>viewList,List<String>titleList){ this.viewList=viewList; this.titleList=titleList; } public static void main(String[] args) { // TODO Auto-generated method stub } // 返回的是页卡的数量 @Override public int getCount() { // TODO Auto-generated method stub return viewList.size(); } // View是否来自于对象 public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } // 实例化一个页卡 @Override public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub container.addView(viewList.get(position)); return viewList.get(position); } // 销毁一个页 @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub container.removeView(viewList.get(position)); } @Override public CharSequence getPageTitle(int position) { // TODO Auto-generated method stub return titleList.get(position); }}
当然为了实现滑动效果,还可以使用fragmentAdapter的适配器:
package com.example.android_pageradapter;import java.util.List;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;public class MyFragmentPagerAdapter extends FragmentPagerAdapter{ private List<String>titleList; private List<Fragment>fragList; public MyFragmentPagerAdapter(FragmentManager fm,List<String>titleList,List<Fragment>fragList) { super(fm); this.titleList = titleList; this.fragList = fragList; } @Override public Fragment getItem(int arg0) { // TODO Auto-generated method stub return fragList.get(arg0); } @Override public int getCount() { // TODO Auto-generated method stub return fragList.size(); } @Override public CharSequence getPageTitle(int position) { // TODO Auto-generated method stub return titleList.get(position); }}
第二部分 scrollview
scrollview是一个比较简单的控件,它主要是为了添加滚动条,ScrollView和HorizontalScrollView分别为垂直方向的滚动条和水平方向的滚动条。ScrollView也叫滚动视图,他一般是用于当拥有很多的内容的时候,屏幕显示不完时,需要通过滚动来显示完整的视图。
public class MainActivity extends Activity { private TextView tv; private ScrollView scroll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv = (TextView) findViewById(R.id.content); tv.setText(getResources().getString(R.string.content)); scroll = (ScrollView) findViewById(R.id.scroll); scroll.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { break; } case MotionEvent.ACTION_UP: { break; } case MotionEvent.ACTION_MOVE: { /* * (1)getScrollY()---滚动条滑动的距离(2)getMeasuredHeight() * (3)getHeight() */ // 顶部 if (scroll.getScrollY() <= 0) { Log.i("Main", "滑动到顶部"); } // 底部 // TextView的总高度 = 一屏幕的高度+滚动条滚动的距离 if (scroll.getChildAt(0).getMeasuredHeight() <= scroll .getHeight() + scroll.getScrollY()) { Log.i("Main", "滑动到底部"); Log.i("Main", "scroll.getChildAt(0).getMeasuredHeight()" + scroll.getChildAt(0) .getMeasuredHeight() + "scroll.getHeight()" + scroll.getHeight() + "scroll.getScrollY()" + scroll.getScrollY()); tv.append(getResources().getString(R.string.content)); } break; } } return false; } }); }}
这里关于getMeasureHeight和getHeight这两种方法,用下图来表示最合适。
第三部分 ViewFlipper
ViewFlipper这个控件同样是为了实现滑动效果的控件。
public class MainActivity extends Activity { private ViewFlipper flipper; private float startX; private int[] resId = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 初始化ViewFlipper flipper = (ViewFlipper) findViewById(R.id.flipper); // 动态导入的方式为ViewFlipper导入子view for (int i = 0; i < resId.length; i++) { flipper.addView(getImageView(resId[i])); } // 为ViewFlipper设置动画效果 /* flipper.setInAnimation(this, R.anim.left_in); flipper.setOutAnimation(this, R.anim.left_out); // 为ViewFlipper的视图切换设置时间间隔 flipper.setFlipInterval(3000); // 启动ViewFlipper flipper.startFlipping(); */ } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { // 手指落下 case MotionEvent.ACTION_DOWN: { startX = event.getX(); break; } // 手指滑动 case MotionEvent.ACTION_MOVE: { //向右滑动(翻看前一页) if (event.getX() - startX > 100) { flipper.setInAnimation(this, R.anim.left_in); flipper.setOutAnimation(this, R.anim.left_out); //显示前一页 flipper.showPrevious(); } 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; } } return super.onTouchEvent(event); } private ImageView getImageView(int resId) { ImageView image = new ImageView(this); image.setBackgroundResource(resId); return image; }}
上面的代码主要是两种不同的情况一种是自动播放的,核心代码如下:
// 为ViewFlipper设置动画效果 /* flipper.setInAnimation(this, R.anim.left_in); flipper.setOutAnimation(this, R.anim.left_out); // 为ViewFlipper的视图切换设置时间间隔 flipper.setFlipInterval(3000); // 启动ViewFlipper flipper.startFlipping(); */
一种是通过手势滑动来进行变换的,核心代码如下:
public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { // 手指落下 case MotionEvent.ACTION_DOWN: { startX = event.getX(); break; } // 手指滑动 case MotionEvent.ACTION_MOVE: { //向右滑动(翻看前一页) if (event.getX() - startX > 100) { flipper.setInAnimation(this, R.anim.left_in); flipper.setOutAnimation(this, R.anim.left_out); //显示前一页 flipper.showPrevious(); } 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; } } return super.onTouchEvent(event); }
- Android学习心得第四课
- Android学习心得第一课
- Android学习心得第二课
- Android学习心得第三课
- Android学习心得第五课
- 《剑指offer》学习心得第四日
- C++ Primer学习心得第四章
- Android学习心得
- android 学习心得
- android学习心得
- Android 学习心得
- Android学习心得
- Android学习心得
- android 学习心得
- android学习心得
- android 学习心得
- Android入门.第四课
- 吴恩达deeplearning.ai第四课学习心得:卷积神经网络与计算机视觉
- nyoj123 士兵杀敌(四) (线段树)
- 链表的java实现与时间和空间复杂度分析
- 2016-3-1
- Long和long的区别
- objective-c 字符串是怎么连接的
- Android学习心得第四课
- CSS3媒介查询
- PHP基础语法
- 学习算法导论——快速排序
- springMVC工作原理
- atm32的sram DATA_IN_ExtSRAM
- 深度神经网络结构以及Pre-Training的理解
- 在printf()函数中修改变量值可能导致结果出错
- define宏定义和局部变量的生命周期