Android HorizontalScrollView滑動(dòng)與ViewPager切換案例詳解
layout布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <HorizontalScrollView android:id="@+id/sc" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="none" > <LinearLayout android:id="@+id/line_sc" android:layout_width="match_parent" android:layout_height="wrap_content" > </LinearLayout> </HorizontalScrollView> <LinearLayout android:id="@+id/view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/sc" /> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/view" > </android.support.v4.view.ViewPager> </RelativeLayout>
MainActivity.java
package com.bwie.test; import java.util.ArrayList; import com.bwie.adapter.MyAdapter; import com.bwie.fragment.F1; import com.bwie.utils.Myutil; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.Menu; import android.view.View; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; public class MainActivity extends FragmentActivity { private LinearLayout line_sc; private HorizontalScrollView sc; private String[] column = new String[] { "舍內(nèi)要聞", "本社介紹", "履行職能", "自身建設(shè)", "社員風(fēng)采", "自我介紹", "校內(nèi)趣聞", "爆料" }; private ArrayList<Fragment> list; private ViewPager vp; private int widthPixels; private ArrayList<TextView> list_view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * 獲取窗口的 寬度 */ // 創(chuàng)建DisplayMetrics類對(duì)象 DisplayMetrics dm = new DisplayMetrics(); // 將當(dāng)前窗口的一些信息放在DisplayMetrics類中 getWindowManager().getDefaultDisplay().getMetrics(dm); widthPixels = dm.widthPixels; // 初始化數(shù)據(jù) init(); // 獲取欄目的數(shù)據(jù) getColumn(); // 創(chuàng)建fragment數(shù)據(jù) setFragment(); // 為vp設(shè)置數(shù)據(jù) FragmentManager fm = getSupportFragmentManager(); vp.setAdapter(new MyAdapter(fm, list)); setTitle_1(vp.getCurrentItem()); // 為vp設(shè)置頁面滑動(dòng)監(jiān)聽 vp.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { //設(shè)置游標(biāo) setTitle_1(arg0); //設(shè)置滑動(dòng) setAutoScroll(arg0); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); } protected void setAutoScroll(int p) { // TODO Auto-generated method stub //獲取當(dāng)前要展示的游標(biāo) TextView textView = list_view.get(p); //獲取其寬度 int w = textView.getMeasuredWidth(); int left = textView.getLeft(); int address=left-widthPixels/2; sc.smoothScrollTo(address, 0); } private void setFragment() { // 創(chuàng)建集合存放fragment對(duì)象 list = new ArrayList<Fragment>(); for (int i = 0; i < column.length; i++) { F1 f1 = new F1(); // 傳值 Bundle b = new Bundle(); b.putInt("column", i); f1.setArguments(b); // 將創(chuàng)建的fragment添加到集合中 list.add(f1); } } private void setTitle_1(int arg0) { //設(shè)置當(dāng)前顯示的textview控件 TextView textView = list_view.get(arg0); //將當(dāng)前的textview顯示 textView.setVisibility(View.VISIBLE); for(int i=0;i<list_view.size();i++) { TextView tv = list_view.get(i); if(tv!=textView) { tv.setVisibility(View.GONE); } } } private void getColumn() { // TODO Auto-generated method stub list_view = new ArrayList<TextView>(); for (int i = 0; i < column.length; i++) { // 創(chuàng)建線性布局來整體作為水平滾動(dòng)的子布局 LinearLayout sc = new LinearLayout(MainActivity.this); // 設(shè)置線性布局的排列方式(垂直) sc.setOrientation(1); sc.setPadding(30, 0, 0, 0); // 1.首先向線性布局中添加textview // 創(chuàng)建textview TextView tv = new TextView(MainActivity.this); // 為tv設(shè)置數(shù)據(jù) tv.setText(column[i]); LinearLayout.LayoutParams params = new LayoutParams( widthPixels / 5, LayoutParams.WRAP_CONTENT); sc.addView(tv, params); // 2.向線性布局中添加下面的橫線 TextView tv_line = new TextView(MainActivity.this); LinearLayout.LayoutParams params_2 = new LayoutParams( widthPixels / 5, 10); tv_line.setBackgroundColor(Color.GRAY); tv_line.setVisibility(View.INVISIBLE); list_view.add(tv_line); sc.addView(tv_line, params_2); // 將數(shù)據(jù)添加到 線性布局中 line_sc.addView(sc); } } private void init() { line_sc = (LinearLayout) findViewById(R.id.line_sc); sc = (HorizontalScrollView) findViewById(R.id.sc); vp = (ViewPager) findViewById(R.id.vp); } }
horizontalScrollView viewpager 字體顏色 滑動(dòng)距離
FragmentManager fm = getSupportFragmentManager(); viewPager.setAdapter(new MyFragmentAdapter(fm, getData())); viewPager.setOnPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int arg0) { // TODO Auto-generated method stub setTag(arg0); } public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); public ArrayList<Fragment> getData() { ArrayList<Fragment> list = new ArrayList<Fragment>(); for (int i = 0; i < str.length; i++) { list.add(new F1(str[i])); } return list; } private void setData() { // TODO Auto-generated method stub List<String> list = new ArrayList<String>(); for (int i = 0; i < str.length; i++) { View view = View.inflate(MainActivity.this, android.R.layout.simple_list_item_1, null); TextView textView = (TextView) view .findViewById(android.R.id.text1); list.add(str[i]); textView.setText(list.get(i)); scroll_ly.addView(view); textView.setTag(i); textView.setOnClickListener(this); } TextView childAt = (TextView) scroll_ly.getChildAt(0); // childAt.setTextColor(Color.RED); childAt.setBackgroundColor(Color.RED); childAt.setTextColor(Color.WHITE); } // 設(shè)置scrollview中textview的變化 public void setTag(int position) { for (int i = 0; i < scroll_ly.getChildCount(); i++) { /** * textView滑動(dòng)的位置 */ // 獲取textview的viewpager滑動(dòng)的當(dāng)前子類 TextView textView = (TextView) scroll_ly.getChildAt(position); int k = textView.getMeasuredWidth(); int l = textView.getLeft(); int s = k / 2 + l - wid / 2; // 設(shè)置scrollView x軸的距離 scrollView.smoothScrollTo(s, 0); /** * textview滑動(dòng)變色 */ TextView textView2 = (TextView) scroll_ly.getChildAt(i); if (position == i) { textView2.setBackgroundColor(Color.RED); textView2.setTextColor(Color.WHITE); } else { textView2.setTextColor(Color.BLACK); textView2.setBackgroundColor(Color.WHITE); } } } public void onClick(View v) { // TODO Auto-generated method stub if (v.getTag() != null) { int i = (Integer) v.getTag(); View childAt = scroll_ly.getChildAt(i); if (v == childAt) { viewPager.setCurrentItem(i); } } }
到此這篇關(guān)于Android HorizontalScrollView滑動(dòng)與ViewPager切換案例詳解的文章就介紹到這了,更多相關(guān)Android HorizontalScrollView滑動(dòng)與ViewPager切換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android如何使用ViewPager2實(shí)現(xiàn)頁面滑動(dòng)切換效果
- Android使用TabLayou+fragment+viewpager實(shí)現(xiàn)滑動(dòng)切換頁面效果
- Android ViewPager撤消左右滑動(dòng)切換功能實(shí)現(xiàn)代碼
- Android開發(fā)之使用ViewPager實(shí)現(xiàn)圖片左右滑動(dòng)切換效果
- Android中的ViewPager視圖滑動(dòng)切換類的入門實(shí)例教程
- Android App中使用ViewPager+Fragment實(shí)現(xiàn)滑動(dòng)切換效果
- Android應(yīng)用中利用ViewPager實(shí)現(xiàn)多頁面滑動(dòng)切換效果示例
- Android編程實(shí)現(xiàn)ViewPager多頁面滑動(dòng)切換及動(dòng)畫效果的方法
- Android實(shí)現(xiàn)界面左右滑動(dòng)切換功能
- Android開發(fā)之ViewPager實(shí)現(xiàn)滑動(dòng)切換頁面
相關(guān)文章
Android Drawable和Bitmap的轉(zhuǎn)換實(shí)例詳解
這篇文章主要介紹了Android Drawable和Bitmap的轉(zhuǎn)換實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05Flutter 和 Android 互相傳遞數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了Flutter 和 Android 互相傳遞數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11android自定義等級(jí)評(píng)分圓形進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了android自定義等級(jí)評(píng)分圓形進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07Flutter實(shí)現(xiàn)彈窗攔截器的示例代碼
彈窗的排隊(duì)執(zhí)行在App中是一個(gè)很常見的應(yīng)用場景,這篇文章為大家介紹了兩個(gè)Flutter實(shí)現(xiàn)彈窗攔截器的示例代碼,感興趣的小伙伴可以學(xué)習(xí)一下2023-09-09MobLink Android端業(yè)務(wù)場景簡單說明
這篇文章主要介紹了MobLink Android端業(yè)務(wù)場景簡單說明,MobLink的功能實(shí)現(xiàn)就是在分享前會(huì)將鏈接的參數(shù)信息保存到服務(wù)器,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-09-09Android 使用【AIDL】調(diào)用外部服務(wù)的解決方法
本篇文章是對(duì)Android中使用AIDL調(diào)用外部服務(wù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Android 顯示和隱藏輸入法實(shí)現(xiàn)代碼
本文所要介紹的這個(gè)方法可以轉(zhuǎn)換軟件輸入法在窗體中的顯示狀態(tài),具體實(shí)現(xiàn)代碼如下,感興趣的你可以參考下哈,希望可以幫助到你2013-03-03