package com.topnews; import java.util.ArrayList; import com.topnews.adapter.NewsFragmentPagerAdapter; import com.topnews.bean.NewsClassify; import com.topnews.fragment.NewsFragment; import com.topnews.tool.BaseTools; import com.topnews.tool.Constants; import com.topnews.view.ColumnHorizontalScrollView; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Gravity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; /** * (android高仿系列)今日头条 --新闻阅读器 (一) * author:RA * blog : http://blog.csdn.net/vipzjyno1/ */ public class MainActivity extends FragmentActivity { /** 自定义HorizontalScrollView */ private ColumnHorizontalScrollView mColumnHorizontalScrollView; LinearLayout mRadioGroup_content; LinearLayout ll_more_columns; RelativeLayout rl_column; private ViewPager mViewPager; private ImageView button_more_columns; /** 新闻分类列表*/ private ArrayList<NewsClassify> newsClassify=new ArrayList<NewsClassify>(); /** 当前选中的栏目*/ private int columnSelectIndex = 0; /** 左阴影部分*/ public ImageView shade_left; /** 右阴影部分 */ public ImageView shade_right; /** 屏幕宽度 */ private int mScreenWidth = 0; /** Item宽度 */ private int mItemWidth = 0; private ArrayList<Fragment> fragments = new ArrayList<Fragment>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mScreenWidth = BaseTools.getWindowsWidth(this); mItemWidth = mScreenWidth / 7;// 一个Item宽度为屏幕的1/7 initView(); } /** 初始化layout控件*/ private void initView() { mColumnHorizontalScrollView = (ColumnHorizontalScrollView)findViewById(R.id.mColumnHorizontalScrollView); mRadioGroup_content = (LinearLayout) findViewById(R.id.mRadioGroup_content); ll_more_columns = (LinearLayout) findViewById(R.id.ll_more_columns); rl_column = (RelativeLayout) findViewById(R.id.rl_column); button_more_columns = (ImageView) findViewById(R.id.button_more_columns); mViewPager = (ViewPager) findViewById(R.id.mViewPager); shade_left = (ImageView) findViewById(R.id.shade_left); shade_right = (ImageView) findViewById(R.id.shade_right); button_more_columns.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); setChangelView(); } /** * 当栏目项发生变化时候调用 * */ private void setChangelView() { initColumnData(); initTabColumn(); initFragment(); } /** 获取Column栏目 数据*/ private void initColumnData() { newsClassify = Constants.getData(); } /** * 初始化Column栏目项 * */ private void initTabColumn() { mRadioGroup_content.removeAllViews(); int count = newsClassify.size(); mColumnHorizontalScrollView.setParam(this, mScreenWidth, mRadioGroup_content, shade_left, shade_right, ll_more_columns, rl_column); for(int i = 0; i< count; i++){ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(mItemWidth , LayoutParams.WRAP_CONTENT); params.leftMargin = 10; params.rightMargin = 10; // TextView localTextView = (TextView) mInflater.inflate(R.layout.column_radio_item, null); TextView localTextView = new TextView(this); localTextView.setTextAppearance(this, R.style.top_category_scroll_view_item_text); // localTextView.setBackground(getResources().getDrawable(R.drawable.top_category_scroll_text_view_bg)); localTextView.setBackgroundResource(R.drawable.radio_buttong_bg); localTextView.setGravity(Gravity.CENTER); localTextView.setPadding(5, 0, 5, 0); localTextView.setId(i); localTextView.setText(newsClassify.get(i).getTitle()); localTextView.setTextColor(getResources().getColorStateList(R.color.top_category_scroll_text_color_day)); if(columnSelectIndex == i){ localTextView.setSelected(true); } localTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { for(int i = 0;i < mRadioGroup_content.getChildCount();i++){ View localView = mRadioGroup_content.getChildAt(i); if (localView != v) localView.setSelected(false); else{ localView.setSelected(true); mViewPager.setCurrentItem(i); } } Toast.makeText(getApplicationContext(), newsClassify.get(v.getId()).getTitle(), Toast.LENGTH_SHORT).show(); } }); mRadioGroup_content.addView(localTextView, i ,params); } } /** * 选择的Column里面的Tab * */ private void selectTab(int tab_postion) { columnSelectIndex = tab_postion; for (int i = 0; i < mRadioGroup_content.getChildCount(); i++) { View checkView = mRadioGroup_content.getChildAt(tab_postion); int k = checkView.getMeasuredWidth(); int l = checkView.getLeft(); int i2 = l + k / 2 - mScreenWidth / 2; // rg_nav_content.getParent()).smoothScrollTo(i2, 0); mColumnHorizontalScrollView.smoothScrollTo(i2, 0); // mColumnHorizontalScrollView.smoothScrollTo((position - 2) * // mItemWidth , 0); } //判断是否选中 for (int j = 0; j < mRadioGroup_content.getChildCount(); j++) { View checkView = mRadioGroup_content.getChildAt(j); boolean ischeck; if (j == tab_postion) { ischeck = true; } else { ischeck = false; } checkView.setSelected(ischeck); } } /** * 初始化Fragment * */ private void initFragment() { int count = newsClassify.size(); for(int i = 0; i< count;i++){ Bundle data = new Bundle(); data.putString("text", newsClassify.get(i).getTitle()); NewsFragment newfragment = new NewsFragment(); newfragment.setArguments(data); fragments.add(newfragment); } NewsFragmentPagerAdapter mAdapetr = new NewsFragmentPagerAdapter(getSupportFragmentManager(), fragments); mViewPager.setAdapter(mAdapetr); mViewPager.setOnPageChangeListener(pageListener); } /** * ViewPager切换监听方法 * */ public OnPageChangeListener pageListener= new OnPageChangeListener(){ @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position) { // TODO Auto-generated method stub mViewPager.setCurrentItem(position); selectTab(position); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
package com.topnews.adapter; import java.util.ArrayList; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.view.ViewGroup; public class NewsFragmentPagerAdapter extends FragmentPagerAdapter { private ArrayList<Fragment> fragments; private FragmentManager fm; public NewsFragmentPagerAdapter(FragmentManager fm) { super(fm); this.fm = fm; } public NewsFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) { super(fm); this.fm = fm; this.fragments = fragments; } @Override public int getCount() { return fragments.size(); } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getItemPosition(Object object) { return POSITION_NONE; } public void setFragments(ArrayList<Fragment> fragments) { if (this.fragments != null) { FragmentTransaction ft = fm.beginTransaction(); for (Fragment f : this.fragments) { ft.remove(f); } ft.commit(); ft = null; fm.executePendingTransactions(); } this.fragments = fragments; notifyDataSetChanged(); } @Override public Object instantiateItem(ViewGroup container, final int position) { Object obj = super.instantiateItem(container, position); return obj; } }
package com.topnews.tool; import android.app.Activity; import android.util.DisplayMetrics; public class BaseTools { /** 获取屏幕的宽度 */ public final static int getWindowsWidth(Activity activity) { DisplayMetrics dm = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(dm); return dm.widthPixels; } }
package com.topnews.tool; import java.util.ArrayList; import com.topnews.bean.NewsClassify; public class Constants { public static ArrayList<NewsClassify> getData() { ArrayList<NewsClassify> newsClassify = new ArrayList<NewsClassify>(); NewsClassify classify = new NewsClassify(); classify.setId(0); classify.setTitle("推荐"); newsClassify.add(classify); classify = new NewsClassify(); classify.setId(1); classify.setTitle("热点"); newsClassify.add(classify); classify = new NewsClassify(); classify.setId(2); classify.setTitle("数码"); newsClassify.add(classify); classify = new NewsClassify(); classify.setId(3); classify.setTitle("杭州"); newsClassify.add(classify); classify = new NewsClassify(); classify.setId(4); classify.setTitle("社会"); newsClassify.add(classify); classify = new NewsClassify(); classify.setId(5); classify.setTitle("娱乐"); newsClassify.add(classify); classify = new NewsClassify(); classify.setId(6); classify.setTitle("科技"); newsClassify.add(classify); classify = new NewsClassify(); classify.setId(7); classify.setTitle("汽车"); newsClassify.add(classify); return newsClassify; } }
package com.topnews.adapter; import java.util.ArrayList; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.view.ViewGroup; public class NewsFragmentPagerAdapter extends FragmentPagerAdapter { private ArrayList<Fragment> fragments; private FragmentManager fm; public NewsFragmentPagerAdapter(FragmentManager fm) { super(fm); this.fm = fm; } public NewsFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) { super(fm); this.fm = fm; this.fragments = fragments; } @Override public int getCount() { return fragments.size(); } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getItemPosition(Object object) { return POSITION_NONE; } public void setFragments(ArrayList<Fragment> fragments) { if (this.fragments != null) { FragmentTransaction ft = fm.beginTransaction(); for (Fragment f : this.fragments) { ft.remove(f); } ft.commit(); ft = null; fm.executePendingTransactions(); } this.fragments = fragments; notifyDataSetChanged(); } @Override public Object instantiateItem(ViewGroup container, final int position) { Object obj = super.instantiateItem(container, position); return obj; } }
<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" > <include layout="@layout/main_head" /> <LinearLayout android:layout_width="match_parent" android:layout_height="40.0dip" android:background="#fff3f3f3" android:orientation="horizontal" > <RelativeLayout android:id="@+id/rl_column" android:layout_width="match_parent" android:layout_height="40.0dip" android:layout_weight="1.0" > <com.topnews.view.ColumnHorizontalScrollView android:id="@+id/mColumnHorizontalScrollView" android:layout_width="match_parent" android:layout_height="40.0dip" android:scrollbars="none" > <LinearLayout android:id="@+id/mRadioGroup_content" android:layout_width="fill_parent" android:layout_height="40.0dip" android:layout_centerVertical="true" android:gravity="center_vertical" android:orientation="horizontal" android:paddingLeft="10.0dip" android:paddingRight="10.0dip" /> </com.topnews.view.ColumnHorizontalScrollView> <ImageView android:id="@+id/shade_left" android:layout_width="10.0dip" android:layout_height="40.0dip" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@drawable/channel_leftblock" android:visibility="gone" /> <ImageView android:id="@+id/shade_right" android:layout_width="10.0dip" android:layout_height="40.0dip" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@drawable/channel_rightblock" android:visibility="visible" /> </RelativeLayout> <LinearLayout android:id="@+id/ll_more_columns" android:layout_width="wrap_content" android:layout_height="40.0dip" > <ImageView android:id="@+id/button_more_columns" android:layout_width="40.0dip" android:layout_height="40.0dip" android:layout_gravity="center_vertical" android:src="@drawable/channel_glide_day_bg" /> </LinearLayout> </LinearLayout> <View android:id="@+id/category_line" android:layout_width="fill_parent" android:layout_height="0.5dip" android:background="#ffdddddd" /> <android.support.v4.view.ViewPager android:id="@+id/mViewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>