因博客文章为自己菜鸟学习文章,没有什么功底,都是给自己浏览的,大神就误入了,详情见代码注释 ;
1、开源架包无法关联源代码的两种解决方式,建议选择第二种简单点:
1、点击 Android Dependencies, 将其在BuildPath remove 掉,再右击点击jar包,将jar add to BuildPath ,然后出现 Attatch 按钮,打开对话框,选择External Folder,打开SDK根目录,extras ,android,support,V4 ,src 点击确定;
2、在Libs目录下创建一个文件夹,文件名是架包的全名,包括后缀.jar ,记得是全名,然后该文件名以加.properties 结尾,打开文件 会显示 src="" , 依次打开SDK根目录,extras ->android->support->V4 ->src 的路径拷贝进去 ,最后它会提示您要不要将“/” 改为 “//” ,点击修改,手动修改也可以,但是一定记得改;
2、 异常,导入的类明明有,但运行的时候,显示类异常,报 class not found异常,解决方案 ,右击 开源架包,选择Build path ,点击 Order And Export ,将对应的jar包勾选即可;
3、设置单行引号 ,用ellipsize ;
4、ViewPager的实现:
1.在布局文件中加入控件viewpager,这个组件,注意这个组件是用来显示左右滑动的界面的,如果不加载xml布局文件,他是不会显示内容的
2.加载要显示的页卡
3. viewpager组件设定一个page适配器,它是基类提供适配器来填充页面ViewPager内部,你很可能想要使用一个更具体的实现,如 FragmentPagerAdapter FragmentStatePagerAdapter。
4.给viewpager添加OnPageChangeListener事件来实现切换的动画等功能(这一步不是必须的)
界面布局:主界面ContentLayout
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/activity_main" tools:context=".MainActivity">
<!--ViewPager是导入外部的类,所以在引用的时候,要将路径全添加进去-->
<android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/ViewPager" ></android.support.v4.view.ViewPager> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="#AA000000" android:layout_alignBottom="@id/ViewPager"> <TextView android:id="@+id/tv_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="end" android:text="我是文本" android:textColor="#ffffff" android:textSize="16sp" android:layout_gravity="center_horizontal"/> <LinearLayout android:layout_marginTop="3dp" android:id="@+id/doc_Linearlayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_horizontal" ></LinearLayout> </LinearLayout> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Large" android:visibility="invisible" android:layout_centerInParent="true"/> </RelativeLayout>文本框下的两个点布局定义drawable文件夹内:
黑色圆点dots_unfocus
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#ffffff"/> </shape>
白色圆点dots_focus
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#AA000000"/> </shape>selector 定义,获取到焦点,显示哪张图片,未获取焦点显示哪张图片
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:drawable="@drawable/dot_focus"/> <item android:drawable="@drawable/unfocus_docs"/> </selector>主代码:
public class MainActivity extends AppCompatActivity { android.os.Handler handler=new android.os.Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 1: viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); handler.sendEmptyMessageDelayed(1, 4000); break; default: break; } } }; private ViewPager viewPager; private ImageView imageView; private ArrayList<Adbean> arrayList; private TextView textView; private LinearLayout docLayout; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); initData(); initListener(); updateTextAndDocs(); } private void initView() { setContentView(R.layout.activity_main); viewPager= (ViewPager) findViewById(R.id.ViewPager); textView= (TextView) findViewById(R.id.tv_text); docLayout= (LinearLayout) findViewById(R.id.doc_Linearlayout); } private void initData() { viewPager.setAdapter(new MyPagerApdater()); arrayList=new ArrayList<Adbean>(); arrayList.add(new Adbean(R.drawable.a,"巩俐不低俗,我就不能低俗")); arrayList.add(new Adbean(R.drawable.b,"朴树又回来了,再唱经典老歌,引万人同唱")); arrayList.add(new Adbean(R.drawable.c, "歼灭北京电影")); arrayList.add(new Adbean(R.drawable.d, "乐视网TV版大放送")); arrayList.add(new Adbean(R.drawable.e, "热血屌丝的反杀")); //在初始化数据之后再初始化点集 initDocs(); int currentValue=Integer.MAX_VALUE/2; //取出余数 int value=currentValue%arrayList.size(); //设置显示的动画的position位置为最大值的中间,但是将其设置为刚好为 arrayListSize整除,这样才能使得刚开始的位置为0 viewPager.setCurrentItem(currentValue-value); progressBar= (ProgressBar) findViewById(R.id.progressBar); handler.sendEmptyMessageDelayed(1,4000); } private void initListener() { viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { updateTextAndDocs(); } @Override public void onPageScrollStateChanged(int state) { } }); } //更新文本 private void updateTextAndDocs() { //获取当前页面的下标 int currentPage=viewPager.getCurrentItem()%arrayList.size(); //设置当前页的文本 textView.setText(arrayList.get(currentPage).getIntros()); //设置当前页的下方是显示黑点还是白点,如果和页面的下标一致则显示 白点,其它黑点 for (int i=0;i<docLayout.getChildCount();i++){ docLayout.getChildAt(i).setEnabled(i == currentPage); } } private void initDocs(){ for(int i=0;i<arrayList.size();i++){ View view=new View(this); //使用布局参数设置View的宽高,和间距 LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(8,8); view.setLayoutParams(params); if(i!=0){ params.leftMargin=8; } view.setBackgroundResource(R.drawable.selector); docLayout.addView(view); } } class MyPagerApdater extends PagerAdapter implements View.OnClickListener{ @Override /** 返回多少个Page */ public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } /* 类似于BaseAdapter的getView 由于它只需要三个界面,无需ViewHolder */ @Override public Object instantiateItem(ViewGroup container, int position) { View view=View.inflate(getApplicationContext(), R.layout.image_ad, null); imageView= (ImageView) view.findViewById(R.id.iv_image); Adbean a=arrayList.get(position%arrayList.size()); imageView.setImageResource(a.getImages()); container.addView(view); view.setOnClickListener(MyPagerApdater.this); updateTextAndDocs(); return view; } @Override /* 销毁page position:当前需要销毁第几个page object: 当亲需要销毁的page */ public void destroyItem(ViewGroup container, int position, Object object) { //super.destroyItem(container, position, object);---此方法如果不定义,那么返回的将是一个异常 container.removeView((View) object); } //给page设置一个监听器 @Override public void onClick(View v) { Toast toast= Toast.makeText(getApplicationContext(), "数据正在加载,请稍后...", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER,0,0); toast.show(); progressBar.setVisibility(ProgressBar.VISIBLE); } } }