知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
HorizontalScrollView實(shí)現(xiàn)多頁(yè)左右滑動(dòng)
發(fā)表時(shí)間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):105
先上圖看看效不雅:
[img]http://img.blog.csdn.net/20150104145052515
上代碼:
PageView是封裝后的一個(gè)類,持續(xù)了HorizontalScrollView。
package com.miquan; import android.content.Context; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.MotionEvent; import android.view.View; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; /** * 具體看博客:http://blog.csdn.net/qiantujava/article/details/42392127 */ public class PageView extends HorizontalScrollView { private int mBaseScrollX;//滑動(dòng)基線。也就是點(diǎn)擊并滑動(dòng)之前的x值,以此值計(jì)算相對(duì)滑動(dòng)距離。 private int mScreenWidth; private int mScreenHeight; private LinearLayout mContainer; private boolean flag; private int mPageCount;//頁(yè)面數(shù)量 private int mScrollX = 200;//滑動(dòng)多長(zhǎng)距離翻頁(yè) public PageView(Context context, AttributeSet attrs) { super(context, attrs); DisplayMetrics dm = context.getApplicationContext().getResources() .getDisplayMetrics(); mScreenWidth = dm.widthPixels; mScreenHeight = dm.heightPixels; } /** * 添加一個(gè)頁(yè)面到最后。 * @param page */ public void addPage(View page) { addPage(page, -1); } /** * 添加一個(gè)頁(yè)面。 * @param page */ public void addPage(View page, int index) { if(!flag) { mContainer = (LinearLayout) getChildAt(0); flag = true; } LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(mScreenWidth, mScreenHeight); if(index == -1) { mContainer.addView(page, params); } else { mContainer.addView(page, index, params); } mPageCount++; } /** * 移除一個(gè)頁(yè)面。 * @param index */ public void removePage(int index) { if(mPageCount < 1) { return; } if(index<0 || index>mPageCount-1) { return; } mContainer.removeViewAt(index); mPageCount--; } /** * 移除所有的頁(yè)面 */ public void removeAllPages() { if(mPageCount > 0) { mContainer.removeAllViews(); } } /** * 獲取頁(yè)面數(shù)量 * @return */ public int getPageCount() { return mPageCount; } /** * 獲取相對(duì)滑動(dòng)地位。由右向左滑動(dòng),返回正值;由左向右滑動(dòng),返回負(fù)值。 * @return */ private int getBaseScrollX() { return getScrollX() - mBaseScrollX; } /** * 使相對(duì)于基線移動(dòng)x距離。 * @param x x為正值時(shí)右移;為負(fù)值時(shí)左移。 */ private void baseSmoothScrollTo(int x) { smoothScrollTo(x + mBaseScrollX, 0); } @Override public boolean onTouchEvent(MotionEvent ev) { int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_UP: int scrollX = getBaseScrollX(); //左滑,大年夜于一半,移到下一頁(yè) if (scrollX > mScrollX) { baseSmoothScrollTo(mScreenWidth); mBaseScrollX += mScreenWidth; } //左滑,不到一半,返回原位 else if (scrollX > 0) { baseSmoothScrollTo(0); } //右滑,不到一半,返回原位 else if(scrollX > -mScrollX) { baseSmoothScrollTo(0); } //右滑,大年夜于一半,移到下一頁(yè) else { baseSmoothScrollTo(-mScreenWidth); mBaseScrollX -= mScreenWidth; } return true; } return super.onTouchEvent(ev); } }
接下來(lái)是構(gòu)造,fragment_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- pageview瑯綾擎必須有LinearLayout,這個(gè)寫逝世了。 --> <com.example.testandrid.PageView android:id="@+id/pageview" android:layout_width="wrap_content" android:layout_height="fill_parent" android:scrollbars="none" > <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="horizontal" > </LinearLayout> </com.example.testandrid.PageView> </LinearLayout>
最后在Activity瑯綾擎調(diào)用久煨。
package com.example.testandrid; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.widget.LinearLayout; public class MainActivity extends Activity { private LayoutInflater inflater; private PageView mPageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_main); inflater = LayoutInflater.from(this); mPageView = (PageView) findViewById(R.id.pageview); //增長(zhǎng)幾個(gè)頁(yè)面 LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.BLUE); mPageView.addPage(layout); LinearLayout layout2 = new LinearLayout(this); layout2.setBackgroundColor(Color.YELLOW); mPageView.addPage(layout2); //這里就是個(gè)通俗的xml構(gòu)造文件 LinearLayout view = (LinearLayout) inflater.inflate(R.layout.page1, null); mPageView.addPage(view); //刪除一個(gè)頁(yè)面 // mPageView.removePage(1); } }
代率攀瑯綾擎的注釋根本上都很清跋扈了,不多說(shuō)。
相關(guān)案例查看更多
相關(guān)閱讀
- 昆明小程序哪家好
- 云南etc小程序
- web前端
- 北京小程序開(kāi)發(fā)
- 網(wǎng)站建設(shè)方案 doc
- 生成海報(bào)
- 昆明網(wǎng)站開(kāi)發(fā)
- 汽車報(bào)廢回收軟件
- 云南網(wǎng)站建設(shè)列表網(wǎng)
- 迪慶小程序開(kāi)發(fā)
- 云南網(wǎng)站建設(shè)公司排名
- 搜索排名
- 云南做網(wǎng)站
- 二叉樹(shù)
- web服務(wù)
- 云南省建設(shè)廳官方網(wǎng)站
- 云南網(wǎng)站開(kāi)發(fā)
- 網(wǎng)站建設(shè)列表網(wǎng)
- 網(wǎng)站建設(shè)案例
- 開(kāi)通微信小程序被騙
- 汽車報(bào)廢系統(tǒng)
- 花農(nóng)小程序
- 網(wǎng)絡(luò)公司排名
- 快排推廣
- 百度小程序開(kāi)發(fā)
- 云南網(wǎng)站建設(shè)服務(wù)
- 云南小程序開(kāi)發(fā)
- 用戶登錄
- 云南小程序開(kāi)發(fā)哪家好
- 網(wǎng)站建設(shè)首頁(yè)