您的位置:首页 > 其它

横向滑动菜单Tablayout和viewpager小圆点结合滑动仿今日头条

2017-11-06 13:53 666 查看
使用Tablayout前需要添加依赖design.25.3.1

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto">

<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:id="@+id/tab_layout"
app:tabGravity="center"
app:tabMode="scrollable"
app:tabIndicatorColor="#ff0000"
app:tabTextColor="#000000"
app:tabSelectedTextColor="#ff0000"
app:tabTextAppearance="@style/tablayout_textsize"

></android.support.design.widget.TabLayout>

<android.support.v4.view.ViewPager

android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragNews_viewpager"
></android.support.v4.view.ViewPager>
</LinearLayout>


代码里面 ,,点击tablayout 给另一个Fragment传值

public class Fragment_News extends Fragment{

private ViewPager viewPager;
private TabLayout tabLayout;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_news, container, false);

viewPager = (ViewPager) view.findViewById(R.id.fragNews_viewpager);
tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);

return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

final List<String> listtab = new ArrayList<>();
//福利、Android、iOS、休息视频、拓展资源、前端、all
listtab.add("福利");
listtab.add("Android");
listtab.add("iOS");
listtab.add("休息视频");
listtab.add("拓展资源");
listtab.add("前端");
listtab.add("all");

//设置适配器,设置tablayout标题
viewPager.setOffscreenPageLimit(listtab.size());
viewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
@Override
public CharSequence getPageTitle(int position) {
return listtab.get(position);
}

@Override
public Fragment getItem(int position) {
Fragment_news_frag fragment_news_frag = new Fragment_news_frag();

Bundle bundle = new Bundle();
bundle.putString("type",listtab.get(position));

fragment_news_frag.setArguments(bundle);
return fragment_news_frag;
}

@Override
public int getCount() {
return listtab.size();
}
});
//tablayout和viewpager 联动
  tabLayout.setupWithViewPager(viewPager); }}  
另一个Fragment的布局,,,使用 PullToRefreshListView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/refresh_list_view"
ptr:ptrDrawable="@drawable/default_ptr_flip"
ptr:ptrAnimationStyle="flip"
ptr:ptrHeaderBackground="#383838"
ptr:ptrHeaderTextColor="#FFFFFF"  >
</com.handmark.pulltorefresh.library.PullToRefreshListView>

</LinearLayout>


展示数据的fragment的代码,,接收 tablayout传来的参数,访问网络

public class Fragment_news_frag extends Fragment{

List<DBean.ResultsBean> list = new ArrayList<>();
int num=1;
String type;
String encode;
private PullListAdapter pullListAdapter;
private PullToRefreshListView refreshListView;
private ILoadingLayout startLabels;
private ILoadingLayout endLabels;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_news_frag, container, false);
refreshListView = (PullToRefreshListView) view.findViewById(R.id.refresh_list_view);

return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

Bundle bundle = getArguments();

type = bundle.getString("type", "福利");

//转码
try {
encode = URLEncoder.encode(type, "utf-8");

} catch (Exception e) {
e.printStackTrace();
}
getData();

//设置模式
refreshListView.setMode(PullToRefreshBase.Mode.BOTH);

startLabels = refreshListView.getLoadingLayoutProxy(true, false);
startLabels.setPullLabel("下拉刷新");
startLabels.setRefreshingLabel("正在拉");
startLabels.setReleaseLabel("放开刷新");
endLabels = refreshListView.getLoadingLayoutProxy(false, true);
endLabels.setPullLabel("上拉刷新");
endLabels.setRefreshingLabel("正在载入...");
endLabels.setReleaseLabel("放开刷新...");

//设置监听
refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
num++;
getDataRefresh();

}

@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
num=1;
getData();
}
});
}

private void getData() {
AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String path="http://gank.io/api/data/"+encode+"/10/"+num;
try {
URL url = new URL(path);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);

int responseCode = connection.getResponseCode();
if (responseCode==200){
InputStream inputStream = connection.getInputStream();

String json = streamtoString(inputStream,"utf-8");

Thread.sleep(1500);
return json;
}

} catch (Exception e) {
e.printStackTrace();
}
return "";
}

@Override
protected void onPostExecute(String json) {
Gson gson = new Gson();
DBean dBean = gson.fromJson(json, DBean.class);

if (dBean!=null && dBean.getResults()!=null) {
list.addAll(dBean.getResults());

long currentTimeMillis = System.currentTimeMillis();
Date date2= new Date(currentTimeMillis);
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");

String format = dateFormat.format(date2);

//设置刷新的时间
endLabels.setLastUpdatedLabel(format);

//停止刷新
refreshListView.onRefreshComplete();
setAdapter();
}
}
};
asyncTask.execute();

}

private void getDataRefresh() {
AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String path="http://gank.io/api/data/"+encode+"/10/"+num;
try {
URL url = new URL(path);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);

int responseCode = connection.getResponseCode();
if (responseCode==200){
InputStream inputStream = connection.getInputStream();

String json = streamtoString(inputStream,"utf-8");

Thread.sleep(1500);
return json;
}

} catch (Exception e) {
e.printStackTrace();
}
return "";
}

@Override
protected void onPostExecute(String json) {
Gson gson = new Gson();
DBean dBean = gson.fromJson(json, DBean.class);

if (dBean!=null && dBean.getResults()!=null) {
list.addAll(0,dBean.getResults());

long currentTimeMillis = System.currentTimeMillis();
Date date2= new Date(currentTimeMillis);
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");

String format = dateFormat.format(date2);

//设置刷新的时间
startLabels.setLastUpdatedLabel(format);

//停止刷新
refreshListView.onRefreshComplete();
setAdapter();
}
}
};
asyncTask.execute();

}

private void setAdapter() {
if (pullListAdapter==null) {
pullListAdapter = new PullListAdapter(list,getActivity());
refreshListView.setAdapter(pullListAdapter);
}else{
pullListAdapter.notifyDataSetChanged();
}
}

public static String streamtoString(InputStream inputStream, String charset) {
try {

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

StringBuilder builder = new StringBuilder();

String s = null;
while((s = bufferedReader.readLine())!=null){
builder.append(s);
}

bufferedReader.close();;
return builder.toString();
} catch (Exception e) {
e.printStackTrace();
}

return null;
}

}


下拉刷新上拉加载的PullToRefreshListView的适配器



public class PullListAdapter extends BaseAdapter{
int IMAGE = 0;
int TEXT = 1;
List<DBean.ResultsBean> list;
Context context;
public PullListAdapter(List<DBean.ResultsBean> list, Context context) {
this.list = list;
this.context = context;
}

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int position) {
return list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public int getViewTypeCount() {
return 2;
}

@Override
public int getItemViewType(int position) {
if (list.get(position).getImages()!=null){
return IMAGE;
}
return TEXT;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position)==IMAGE){
//如果返回IMAGE
ImageHolder holder;
if (convertView==null){
convertView = View.inflate(context, R.layout.pull_item2,null);

holder = new ImageHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.pull_image);
holder.textView = (TextView) convertView.findViewById(R.id.pull_text);

convertView.setTag(holder);
}else{
holder = (ImageHolder) convertView.getTag();
}
holder.textView.setText(list.get(position).getDesc());
ImageLoader.getInstance().displayImage(list.get(position).getImages().get(0),holder.imageView, ImageLoaderUtil.getDefautOption());
}else if (getItemViewType(position)==TEXT){
//如果返回TEXT
TextHolder holder;
if (convertView==null){
convertView = View.inflate(context, R.layout.pull_item1,null);

holder = new TextHolder();

holder.textView = (TextView) convertView.findViewById(R.id.pull_text);

convertView.setTag(holder);
}else{
holder = (TextHolder) convertView.getTag();
}
holder.textView.setText(list.get(position).getDesc());

}
return convertView;
}
class ImageHolder{
ImageView imageView;
TextView textView;
}
class TextHolder{
TextView textView;
}
}


上面是无限轮播图 下面是gridview 可以下拉刷新加载



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
>
<android.support.v4.view.ViewPager
android:background="#ff0000"
android:id="@+id/gridview_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v4.view.ViewPager>

这是小圆点的布局,
小圆点需要在drawable下面建立shape01.xml
<?xml version="1.0" encoding="utf-8"?>
没选中的小圆点
 <shape xmlns:android="http://schemas.android.com/apk/res/android">

<corners android:radius="5dp"/>
<size android:height="10dp" android:width="10dp"/>
<solid android:color="#000000"/>
</shape>
选中的小圆点
<shape xmlns:android="http://schemas.android.com/apk/res/android">

<corners android:radius="5dp"/>
<size android:height="10dp" android:width="10dp"/>
<solid android:color="#ff0000"/>
</shape>

 <LinearLayout
android:layout_width="100dp"
android:layout_height="50dp"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:id="@+id/gridview_linearshape"
></LinearLayout>
</RelativeLayout>

<com.handmark.pulltorefresh.library.PullToRefreshGridView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/pull_refresh_grid"
android:layout_height="0dp"
android:layout_weight="5"
android:layout_width="match_parent"
android:numColumns="2"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
android:columnWidth="100dp"
android:stretchMode="columnWidth"
android:gravity="fill"
ptr:ptrMode="both" />
</LinearLayout>

public class Fragment_GridView extends Fragment{
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what==0){
int currentItem = viewPager.getCurrentItem();
viewPager.setCurrentItem(currentItem+1);
handler.sendEmptyMessageDelayed(0,2000);
}
}
};

private ViewPager viewPager;
private LinearLayout linearLayout;
private List<ImageView> listshape;
private List<String> list;
List<MeishiBean.ResultBean.DataBean> listgrid = new ArrayList<>();
private GridViewAdapter gridViewAdapter;
private PullToRefreshGridView refreshGridView;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_gridview, container, false);
refreshGridView = (PullToRefreshGridView) view.findViewById(R.id.pull_refresh_grid);
viewPager = (ViewPager) view.findViewById(R.id.gridview_viewpager);
linearLayout = (LinearLayout) view.findViewById(R.id.gridview_linearshape);
return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

//访问数据的方法
getData();
//访问网络图片
list = new ArrayList<>();
list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207203154_yAhxW.thumb.700_0.jpeg");
list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207204451_vUxdK.thumb.700_0.jpeg");
list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207204612_khkBv.thumb.700_0.jpeg");
list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207205514_uMz5u.thumb.700_0.jpeg");
list.add("https://b-ssl.duitang.com/uploads/item/201502/10/20150210133942_AaJ8R.thumb.700_0.jpeg");

initShape();

LuoBoAdapter luoBoAdapter = new LuoBoAdapter(list, getActivity());
viewPager.setAdapter(luoBoAdapter);

viewPager.setCurrentItem(100000);
handler.sendEmptyMessageDelayed(0,2000);

refreshGridView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() {
@Override
public void onPullDownToRefresh(final PullToRefreshBase<GridView> refreshView) {

long currentTimeMillis = System.currentTimeMillis();
Date date2= new Date(currentTimeMillis);
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");

String format = dateFormat.format(date2);
//设置刷新的时间
refreshView.setLastUpdatedLabel(format);
getDataRefresh();
}

@Override
public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) {

long currentTimeMillis = System.currentTimeMillis();
Date date2= new Date(currentTimeMillis);
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");

String format = dateFormat.format(date2);
//设置刷新的时间
refreshView.setLastUpdatedLabel(format);
getData();
}
});
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
for (int i = 0; i <listshape.size() ; i++) {
if (i==position%listshape.size()){
listshape.get(i).setImageResource(R.drawable.shape02);
}else{
listshape.get(i).setImageResource(R.drawable.shape01);
}
}
}

@Override
public void onPageSelected(int position) {

}

@Override
public void onPageScrollStateChanged(int state) {

}
});
}

private void getDataRefresh() {
AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String path="http://apis.juhe.cn/cook/query?key=b0eeae4ccd73cce88a8d78e60c64d61c&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=3";
try {
URL url = new URL(path);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);

int responseCode = connection.getResponseCode();
if (responseCode==200){
InputStream inputStream = connection.getInputStream();

String json = streamtoString(inputStream,"utf-8");

Thread.sleep(1500);
return json;
}

} catch (Exception e) {
e.printStackTrace();
}
return "";
}

@Override
protected void onPostExecute(String json) {
Gson gson = new Gson();
MeishiBean meishibean = gson.fromJson(json, MeishiBean.class);

if (meishibean!=null && meishibean.getResult().getData()!=null) {
listgrid.addAll(0,meishibean.getResult().getData());

//停止刷新
refreshGridView.onRefreshComplete();
setAdapter();
}
}
};
asyncTask.execute();

}
private void getData() {
AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String path="http://apis.juhe.cn/cook/query?key=b0eeae4ccd73cce88a8d78e60c64d61c&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=3";
try {
URL url = new URL(path);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);

int responseCode = connection.getResponseCode();
if (responseCode==200){
InputStream inputStream = connection.getInputStream();

String json = streamtoString(inputStream,"utf-8");

Thread.sleep(1500);
return json;
}

} catch (Exception e) {
e.printStackTrace();
}
return "";
}

@Override
protected void onPostExecute(String json) {
Gson gson = new Gson();
MeishiBean meishibean = gson.fromJson(json, MeishiBean.class);

if (meishibean!=null && meishibean.getResult().getData()!=null) {
listgrid.addAll(meishibean.getResult().getData());

//停止刷新
refreshGridView.onRefreshComplete();
setAdapter();
}
}
};
asyncTask.execute();

}http://write.blog.csdn.net/postedit

private void setAdapter() {
if (gridViewAdapter==null) {
gridViewAdapter = new GridViewAdapter(listgrid, getActivity());
refreshGridView.setAdapter(gridViewAdapter);
}else{
gridViewAdapter.notifyDataSetChanged();
}
}

初始化小圆点
private void initShape() {
listshape = new ArrayList<>();

//清空布局和集合
linearLayout.removeAllViews();
listshape.clear();

for (int i = 0; i < list.size(); i++) {
ImageView imageView = new ImageView(getActivity());
if (i == 0) {
imageView.setImageResource(R.drawable.shape02);
} else {
imageView.setImageResource(R.drawable.shape01);
}

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(5, 0, 5, 0);
///添加到集合和布局里
listshape.add(imageView);
linearLayout.addView(imageView, layoutParams);
}
}
public static String streamtoString(InputStream inputStream, String charset) {
try {

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

StringBuilder builder = new StringBuilder();

String s = null;
while((s = bufferedReader.readLine())!=null){
builder.append(s);
}

bufferedReader.close();
return builder.toString();
} catch (Exception e) {
e.printStackTrace();
}

return null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: