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-05
Flutter 和 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-11
android自定義等級(jí)評(píng)分圓形進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了android自定義等級(jí)評(píng)分圓形進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
Flutter實(shí)現(xiàn)彈窗攔截器的示例代碼
彈窗的排隊(duì)執(zhí)行在App中是一個(gè)很常見的應(yīng)用場(chǎng)景,這篇文章為大家介紹了兩個(gè)Flutter實(shí)現(xiàn)彈窗攔截器的示例代碼,感興趣的小伙伴可以學(xué)習(xí)一下2023-09-09
MobLink Android端業(yè)務(wù)場(chǎng)景簡單說明
這篇文章主要介紹了MobLink Android端業(yè)務(wù)場(chǎng)景簡單說明,MobLink的功能實(shí)現(xiàn)就是在分享前會(huì)將鏈接的參數(shù)信息保存到服務(wù)器,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-09-09
Android 使用【AIDL】調(diào)用外部服務(wù)的解決方法
本篇文章是對(duì)Android中使用AIDL調(diào)用外部服務(wù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Android 顯示和隱藏輸入法實(shí)現(xiàn)代碼
本文所要介紹的這個(gè)方法可以轉(zhuǎn)換軟件輸入法在窗體中的顯示狀態(tài),具體實(shí)現(xiàn)代碼如下,感興趣的你可以參考下哈,希望可以幫助到你2013-03-03

