上次课 实现了 page1 page2 page3 page4 四个界面来回滑动 。
整体
123
1 3结合
1 2结合
gridview-》fragment-》viewpage-》horizontalscrolview
gridview放在fragment上,fragment放在viewpage上,与horizontalscrolview
这次实现了滑动过程, 上面的滑动条跟上面的选项移动
gridview
package com.example.android160620.backup;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.widget.GridView;
import com.example.android160620.R;
import com.example.android160620.R.drawable;
import com.example.android160620.R.id;
import com.example.android160620.R.layout;
import com.example.android160620.adapter.MyAdapter;
public class GridViewActivity extends Activity {
private GridView gridView;
//数据源
private List<Integer> dataList = new ArrayList<Integer>();
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉title栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.backup_gridview);
initGridView();
}
private void initGridView() {
//1、获取控件
gridView = (GridView) findViewById(R.id.gridview);
//2、获取数据源
getData();
//3、创建适配器:将数据源和视图(控件)绑定到一起
adapter = new MyAdapter(dataList, this);
//4、将适配器绑定到gridview中
gridView.setAdapter(adapter);
}
private void getData() {
dataList.add(R.drawable.pic_rs1_1);
dataList.add(R.drawable.pic_rs1_2);
dataList.add(R.drawable.pic_rs1_3);
dataList.add(R.drawable.pic_rs1_4);
dataList.add(R.drawable.pic_rs1_5);
dataList.add(R.drawable.pic_rs1_6);
dataList.add(R.drawable.pic_rs1_7);
dataList.add(R.drawable.pic_rs1_8);
dataList.add(R.drawable.pic_rs1_9);
dataList.add(R.drawable.pic_rs1_10);
dataList.add(R.drawable.pic_rs1_11);
dataList.add(R.drawable.pic_rs1_12);
dataList.add(R.drawable.pic_rs1_13);
dataList.add(R.drawable.pic_rs1_14);
dataList.add(R.drawable.pic_rs1_15);
dataList.add(R.drawable.pic_rs1_16);
dataList.add(R.drawable.pic_rs1_17);
dataList.add(R.drawable.pic_rs1_18);
dataList.add(R.drawable.pic_rs1_19);
dataList.add(R.drawable.pic_rs1_20);
dataList.add(R.drawable.pic_rs1_21);
dataList.add(R.drawable.pic_rs1_22);
dataList.add(R.drawable.pic_rs1_23);
dataList.add(R.drawable.pic_rs1_24);
dataList.add(R.drawable.pic_rs1_25);
dataList.add(R.drawable.pic_rs1_26);
dataList.add(R.drawable.pic_rs1_27);
dataList.add(R.drawable.pic_rs1_28);
dataList.add(R.drawable.pic_rs1_29);
dataList.add(R.drawable.pic_rs1_30);
dataList.add(R.drawable.pic_rs1_31);
dataList.add(R.drawable.pic_rs1_32);
dataList.add(R.drawable.pic_rs1_33);
dataList.add(R.drawable.pic_rs1_34);
dataList.add(R.drawable.pic_rs1_35);
dataList.add(R.drawable.pic_rs1_36);
dataList.add(R.drawable.pic_rs1_37);
dataList.add(R.drawable.pic_rs1_38);
dataList.add(R.drawable.pic_rs1_39);
dataList.add(R.drawable.pic_rs1_40);
}
}
fragment
package com.example.android160620.fragment;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.GridView;
import android.widget.TextView;
import com.example.android160620.R;
import com.example.android160620.adapter.MyAdapter;
public class MyFragment extends Fragment{
private View view;
private int index;
private boolean sex;
//===================gridview 初始化======================
private GridView gridView;
//数据源
private List<Integer> dataList = new ArrayList<Integer>();
private MyAdapter adapter;
//===================gridview 初始化======================
/**
* 创建fragment布局
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.layout_fragment, container, false);
return view;
}
/**
* 和当前fragment关联的activity的oncreate方法调用完成以后,执行的方法
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle bundle = this.getArguments();
index = bundle.getInt("index");
sex = bundle.getBoolean("sex");
initGridView();
}
private void initGridView() {
//1、获取控件
gridView = (GridView) view.findViewById(R.id.gridview);
//2、获取数据源
getData();
//3、创建适配器:将数据源和视图(控件)绑定到一起
adapter = new MyAdapter(dataList, getActivity());
//4、将适配器绑定到gridview中
gridView.setAdapter(adapter);
}
private void getData() {
switch(index) {
case 0:
break;
}
dataList.add(R.drawable.pic_rs1_1);
dataList.add(R.drawable.pic_rs1_2);
dataList.add(R.drawable.pic_rs1_3);
dataList.add(R.drawable.pic_rs1_4);
dataList.add(R.drawable.pic_rs1_5);
dataList.add(R.drawable.pic_rs1_6);
dataList.add(R.drawable.pic_rs1_7);
dataList.add(R.drawable.pic_rs1_8);
dataList.add(R.drawable.pic_rs1_9);
dataList.add(R.drawable.pic_rs1_10);
dataList.add(R.drawable.pic_rs1_11);
dataList.add(R.drawable.pic_rs1_12);
dataList.add(R.drawable.pic_rs1_13);
dataList.add(R.drawable.pic_rs1_14);
dataList.add(R.drawable.pic_rs1_15);
dataList.add(R.drawable.pic_rs1_16);
dataList.add(R.drawable.pic_rs1_17);
dataList.add(R.drawable.pic_rs1_18);
dataList.add(R.drawable.pic_rs1_19);
dataList.add(R.drawable.pic_rs1_20);
dataList.add(R.drawable.pic_rs1_21);
dataList.add(R.drawable.pic_rs1_22);
dataList.add(R.drawable.pic_rs1_23);
dataList.add(R.drawable.pic_rs1_24);
dataList.add(R.drawable.pic_rs1_25);
dataList.add(R.drawable.pic_rs1_26);
dataList.add(R.drawable.pic_rs1_27);
dataList.add(R.drawable.pic_rs1_28);
dataList.add(R.drawable.pic_rs1_29);
dataList.add(R.drawable.pic_rs1_30);
dataList.add(R.drawable.pic_rs1_31);
dataList.add(R.drawable.pic_rs1_32);
dataList.add(R.drawable.pic_rs1_33);
dataList.add(R.drawable.pic_rs1_34);
dataList.add(R.drawable.pic_rs1_35);
dataList.add(R.drawable.pic_rs1_36);
dataList.add(R.drawable.pic_rs1_37);
dataList.add(R.drawable.pic_rs1_38);
dataList.add(R.drawable.pic_rs1_39);
dataList.add(R.drawable.pic_rs1_40);
}
}
viewpage
package com.example.android160620.backup;
import java.util.ArrayList;
import java.util.List;
import com.example.android160620.R;
import com.example.android160620.R.id;
import com.example.android160620.R.layout;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
public class BackupViewpagerActivity extends Activity {
private ViewPager viewPager;
private List<View> dataList = new ArrayList<View>();
//布局加载器
private LayoutInflater layoutInflater;
private MyPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉title栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.backup_viewpager);
initViewPager();
}
private void initViewPager() {
//1、获取控件
viewPager = (ViewPager) findViewById(R.id.viewpager);
//2、获取数据源
getData();
//3、创建适配器
adapter = new MyPagerAdapter();
//4、设置适配器
viewPager.setAdapter(adapter);
}
private void getData() {
//初始化布局加载器
layoutInflater = LayoutInflater.from(this);
//加载page1页面
View page1 = layoutInflater.inflate(R.layout.page1, null);
View page2 = layoutInflater.inflate(R.layout.page2, null);
View page3 = layoutInflater.inflate(R.layout.page3, null);
View page4 = layoutInflater.inflate(R.layout.page4, null);
//添加数据源
dataList.add(page1);
dataList.add(page2);
dataList.add(page3);
dataList.add(page4);
}
private class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return dataList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
/**
* 删除
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
Log.v("", "pagerAdapter destroyItem position = " + position);
}
/**
* 初始化
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
Log.v("", "pagerAdapter instantiateItem position = " + position);
//获取视图
View view = dataList.get(position);
//添加视图
container.addView(view);
return view;
}
}
}
horizontalscollview
<LinearLayout 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"
android:orientation="vertical"
tools:context=".LogInActivity" >
<HorizontalScrollView
android:id="@+id/hsv"
android:layout_width="match_parent"
android:layout_height="50dip"
android:scrollbars="none" >
<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="match_parent"
android:layout_height="50dip"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/rb1"
style="@style/radio_button"
android:text="发型" />
<RadioButton
android:id="@+id/rb2"
style="@style/radio_button"
android:text="脸型" />
<RadioButton
android:id="@+id/rb3"
style="@style/radio_button"
android:text="眉毛" />
<RadioButton
android:id="@+id/rb4"
style="@style/radio_button"
android:text="眼睛" />
<RadioButton
android:id="@+id/rb5"
style="@style/radio_button"
android:text="嘴巴" />
<RadioButton
android:id="@+id/rb6"
style="@style/radio_button"
android:text="特征" />
<RadioButton
android:id="@+id/rb7"
style="@style/radio_button"
android:text="眼镜" />
<RadioButton
android:id="@+id/rb8"
style="@style/radio_button"
android:text="衣服" />
<RadioButton
android:id="@+id/rb9"
style="@style/radio_button"
android:text="帽子" />
<RadioButton
android:id="@+id/rb10"
style="@style/radio_button"
android:text="爱好" />
<RadioButton
android:id="@+id/rb11"
style="@style/radio_button"
android:text="背景" />
<RadioButton
android:id="@+id/rb12"
style="@style/radio_button"
android:text="气泡" />
</RadioGroup>
</HorizontalScrollView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#00ff00" >
<TextView
android:id="@+id/cursor_tv"
android:layout_width="100dip"
android:layout_height="2dip"
android:background="#0000ff" />
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</android.support.v4.view.ViewPager>
</LinearLayout>
主界面
package com.example.android160620;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Window;
import android.view.animation.TranslateAnimation;
import android.widget.HorizontalScrollView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
import com.example.android160620.fragment.MyFragment;
public class MainActivity extends FragmentActivity {
private RadioGroup group;
private ViewPager viewPager;
private MyAdapter adapter;
private TextView cursorView;
private HorizontalScrollView hsv;
private RadioButton radioButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉title栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//初始化顶部tab
initTab();
//初始化viewpager
initViewPager();
initCursor();
initHsv();
}
private void initHsv() {
hsv = (HorizontalScrollView) findViewById(R.id.hsv);
// hsv.scrollTo(x, 0)
}
private void initCursor() {
cursorView = (TextView) findViewById(R.id.cursor_tv);
}
private void initViewPager() {
//1、获取控件
viewPager = (ViewPager) findViewById(R.id.viewpager);
//创建数据源
//2、获取数据源
//3、创建适配器
//获取fragment的管理类
FragmentManager manager = getSupportFragmentManager();
adapter = new MyAdapter(manager);
//4、设置配齐
viewPager.setAdapter(adapter);
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
/**
* 选中某个page
*/
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
}
/**
* 当viewpager华东过程中触发的事件
* position 当前的位置
* positionOffset 当前滑动的比例
* positionOffsetPixels 当前滑动的像素
*/
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
//获取一个tab的宽度
int width = radioButton.getWidth();
//计算新的scrollview华东的位置
int newPos = (int) (position * width + positionOffset * width);
int center = (viewPager.getWidth() - width) / 2;
//控制水平滑动条的移动
hsv.scrollTo(newPos - center, 0);
//控制游标移动
startMoveCursor(position, positionOffset);
}
/**
* 当viewpager状态改变的时候触发事件
*/
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
}
});
}
private int from = 0;
/**
* 控制游标移动
* @param position 当前移动的位置
* @param positionOffset 当前移动的百分比
*/
protected void startMoveCursor(int position, float positionOffset) {
//获取当前被选中的radiobutton
RadioButton rb = (RadioButton) group.getChildAt(position);
//定义两个长度的数组 0下标 代表x坐标 1下标y坐标
int[] location = new int[2];
//获取当前radiobutton的坐标
rb.getLocationInWindow(location);
//计算移动后的坐标
int to = (int) (location[0] + positionOffset * rb.getWidth());
//创建动画
TranslateAnimation ta = new TranslateAnimation(
from,
to,
0,
0);
ta.setDuration(100);
//动画完成以后停留在当前结束的位置
ta.setFillAfter(true);
cursorView.startAnimation(ta);
from = to;
}
private void initTab() {
radioButton = (RadioButton) findViewById(R.id.rb1);
group = (RadioGroup) findViewById(R.id.radiogroup);
group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId) {
case R.id.rb1:
viewPager.setCurrentItem(0);
break;
case R.id.rb2:
viewPager.setCurrentItem(1);
break;
case R.id.rb3:
viewPager.setCurrentItem(2);
break;
case R.id.rb4:
viewPager.setCurrentItem(3);
break;
case R.id.rb5:
viewPager.setCurrentItem(4);
break;
case R.id.rb6:
viewPager.setCurrentItem(5);
break;
case R.id.rb7:
viewPager.setCurrentItem(6);
break;
case R.id.rb8:
viewPager.setCurrentItem(7);
break;
case R.id.rb9:
viewPager.setCurrentItem(8);
break;
case R.id.rb10:
viewPager.setCurrentItem(9);
break;
case R.id.rb11:
viewPager.setCurrentItem(10);
break;
case R.id.rb12:
viewPager.setCurrentItem(11);
break;
}
}
});
}
private class MyAdapter extends FragmentPagerAdapter {
/**
*
* @param fm fragment的管理类
*/
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
MyFragment fragment = new MyFragment();
//创建一个bundle对象,用于传递数据
Bundle bundle = new Bundle();
bundle.putInt("index", position);
bundle.putBoolean("sex", true);
//设置参数
fragment.setArguments(bundle);
return fragment;
}
@Override
public int getCount() {
return 12;
}
}
}
笔记
gridview(九宫格)以及horizontalScrollview(左右滑动)(滑动 只能有一个子类
horizontalscrolview radiogroup 与 radiobutton(样式)
加在样式里面
<style name=""
<item name="属性名">名称<item>
</style>
<HotizontalScorollView>
<radiogroup>
<radioButton>
id
syle
text
</radioButton>
</radiogroup>
</HorizontalScorollView>
viewpage 加载 fragment
)和fament
viewpage 也可以实现了无线左右滑动。
可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块。
gridview-》fragment-》viewpage-》horizontalscrolview