廣告輪播實現(ViewPager的實現)
因部落格文章為自己菜鳥學習文章,沒有什麼功底,都是給自己瀏覽的,大神就誤入了,詳情見程式碼註釋 ;
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
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); } } }