Tabhost+framgent+ViewPager滑動效果,tabhostframgent

來源:互聯網
上載者:User

Tabhost+framgent+ViewPager滑動效果,tabhostframgent

瞭解了一下Tabhost+framgent+ViewPager實現頁面滑動的效果

:https://github.com/asijack/TabhostDemo-framgent-ViewPager

效果

 

需要注意一下幾點:

1、位移量的計算:

//初始化圖片的位移像素    public     void InitImage(){        image=(ImageView) findViewById(R.id.cursor);        //只有載入了Bitmap對象的時候才能對圖片進行查看修改,decodeResource擷取了Bitmap對象        bmpW=BitmapFactory.decodeResource(getResources(), R.drawable.cours).getWidth();//        Android 可設定為隨著視窗大小調整縮放比例,但即便如此,手機程式設計人員還是必須知道手機螢幕的邊界,以避免縮放造成的布局變形問題。//        手機的解析度資訊是手機的一項重要訊息,很好的是,Android 已經提供DisplayMetircs 類可以很方便的擷取解析度。//        getWindowManager().getDefaultDisplay().getMetrics;//        建構函式DisplayMetrics 不需要傳遞任何參數;調用getWindowManager() 之後,會取得現有Activity 的Handle //      此時,getDefaultDisplay() 方法將取得的寬高維度存放於DisplayMetrics 對象中,而取得的寬高維度是以像素為單位(Pixel) //      “像素”所指的是“絕對像素”而非“相對像素”。        DisplayMetrics dm=new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(dm);        //擷取裝置的寬度        int screenW=dm.widthPixels;        offset=(screenW/4 -bmpW)/2;//4個item的位移量//        offset = (screenW-2*bmpW)/4;//2 個item 的位移量                //imageView設定平移,使底線平移到初始位置(平移一個offset)        Matrix matrix=new Matrix();        //  Matrix的操作,總共分為translate(平移),rotate(旋轉),scale(縮放)和skew(傾斜)四種        //每一種變換在Android的API裡都提供了set, post和pre三種操作方式,除了translate,其他三種操作都可以指定中心點。        //  set是直接設定Matrix的值,每次set一次,整個Matrix的數組都會變掉。        //post是後乘,當前的矩陣乘以參數給出的矩陣。可以連續多次使用post,來完成所需的整個變換。        matrix.postTranslate(offset, 0);        image.setImageMatrix(matrix);    }

2、滑動動畫的實現

//view頁面滑動的監聽    public class MyOnPageChanceListener implements OnPageChangeListener{                //此方法是在狀態改變的時候調用,arg0參數 有三種狀態0,1,2 ==1時表示正在滑動,==2時表示滑動完畢,==0時表示什麼都沒做        //當頁面開始滑動的時候,三種狀態的變化順序為(1,2,0)        @Override        public void onPageScrollStateChanged(int arg0) {                    }        //當頁面滑動的時候會調用此方法,在滑動停止之前,此方法會一直得到調用        //arg0 當前頁面,及你點擊滑動的頁面  arg1 當前頁面便宜的百分比  arg2 當前頁面位移的像素位置        @Override        public void onPageScrolled(int arg0, float arg1, int arg2) {        }        //此方法是頁面跳轉完後 得到調用 arg0 是你當前選中的頁面的position(位置編號)        @Override        public void onPageSelected(int arg0) {            int one=offset*2+bmpW;//兩個相鄰頁面的位移量             Animation animation=new TranslateAnimation(currIndex*one, arg0*one,0,0);//平移動畫            currIndex=arg0;            animation.setFillAfter(true);//動畫中止時停留在最後一幀,不然會回到沒有執行前的狀態            animation.setDuration(200);//動畫期間0.2秒             image.startAnimation(animation);            int i=currIndex +1;            Toast.makeText(MainActivity.this, "您選擇了第"+i+"個頁卡", Toast.LENGTH_SHORT).show();                    }    }

有興趣的朋友可以在這裡實現自己想要的動畫效果

3、最後一個就是MyFragmentPagerAdapter這個類了

/* *  * 一、Google官方認為,ViewPager應該和Fragment一起使用時,此時ViewPager的適配器是FragmentPagerAdapter *    當你實現一個FragmentPagerAdapter,你必須至少覆蓋以下方法:    getCount()    getItem()        二、 如果ViewPager沒有和Fragment一起,ViewPager的適配器是PagerAdapter,               它是基類提供適配器來填充頁面ViewPager內部,當你實現一個PagerAdapter,你必須至少覆蓋以下方法:    instantiateItem(ViewGroup, int)    destroyItem(ViewGroup, int, Object)    getCount()    isViewFromObject(View, Object) */public class MyFragmentPagerAdapter extends FragmentPagerAdapter {    ArrayList<Fragment> list;    public MyFragmentPagerAdapter(FragmentManager fm,ArrayList<Fragment> list) {        super(fm);        this.list=list;    }        @Override    public Fragment getItem(int arg0) {        return list.get(arg0);    }    @Override    public int getCount() {        return list.size();    }    }

但是這個不是我想要的效果,後面會貼出我自己想要的效果的demo出來。

 

哪裡有問題歡迎指教,3q

:

https://github.com/asijack/TabhostDemo-framgent-ViewPager

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.