DevStore首页 > DEV资源 > 源码下载 > 源码详情

今日头条Android客户端源码

5
anitbird | 2014-11-01 10:47    浏览量(11969)    评论(96)    收藏(40)
功能分类:新闻 支持平台:Android 运行环境:Eclipse
开发语言:Java 开发工具:Eclipse 源码大小:6.38MB
下载源码 2019 人下载

源码简介

今日头条Android客户端源码。用到的知识有:
1、自定义控件,重写控件的相关方法
实现:
(1)频道管理(带拖拽,动画)
(2) 新闻列表中每个字段按照时间进行排列,并且带有悬浮效果
(3)城市选择列表中的城市信息按照首字母进行排列,并且带有悬浮效果
注意:(1)通过重写GridView;
(2)和(3)通过重写ListView,之后通过接口判断是否在最最上方了,进行状态变更,DEMO的代码中可以清晰看懂。
2、SQLITE数据库的使用
实现:保存用户设置的频道信息
3、Activity之间的动画跳转方式
4、Animation动画类的相关知识
实现:频道管理中频道的移动动画
5、WebView的相关知识和 jsoup库解析HTML
实现:新闻详情的查看、排版,图片信息的提取。(这块没深入研究,只是从别人那边借鉴了点放进去的)
6、重写ViewPager和ImageView
实现:图片浏览和通过手势放大缩小
7、GestureDetector手势类及OnGestureListener手势监听类的使用
实现:新闻详情页面根据手势滑动来关闭该页面

源码截图

  • 运行截图
  • 运行截图
  • 运行截图
  • 运行截图
  • 运行截图
  • 运行截图
  • 运行截图
  • 运行截图
DevStore所有源码来自用户上传分享,版权问题及牵扯到商业纠纷均与DevStore无关。

源码片段

public class NewsFragment extends Fragment {
	private final static String TAG = "NewsFragment";
	Activity activity;
	ArrayList newsList = new ArrayList();
	HeadListView mListView;
	NewsAdapter mAdapter;
	String text;
	int channel_id;
	ImageView detail_loading;
	public final static int SET_NEWSLIST = 0;
	//Toast提示框
	private RelativeLayout notify_view;
	private TextView notify_view_text;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		Bundle args = getArguments();
		text = args != null ? args.getString("text") : "";
		channel_id = args != null ? args.getInt("id", 0) : 0;
		initData();
		super.onCreate(savedInstanceState);
	}

	@Override
	public void onAttach(Activity activity) {
		// TODO Auto-generated method stub
		this.activity = activity;
		super.onAttach(activity);
	}
	/** 此方法意思为fragment是否可见 ,可见时候加载数据 */
	@Override
	public void setUserVisibleHint(boolean isVisibleToUser) {
		if (isVisibleToUser) {
			//fragment可见时加载数据
			if(newsList !=null && newsList.size() !=0){
				handler.obtainMessage(SET_NEWSLIST).sendToTarget();
			}else{
				new Thread(new Runnable() {
					@Override
					public void run() {
						// TODO Auto-generated method stub
						try {
							Thread.sleep(2);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						handler.obtainMessage(SET_NEWSLIST).sendToTarget();
					}
				}).start();
			}
		}else{
			//fragment不可见时不执行操作
		}
		super.setUserVisibleHint(isVisibleToUser);
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = LayoutInflater.from(getActivity()).inflate(R.layout.news_fragment, null);
		mListView = (HeadListView) view.findViewById(R.id.mListView);
		TextView item_textview = (TextView)view.findViewById(R.id.item_textview);
		detail_loading = (ImageView)view.findViewById(R.id.detail_loading);
		//Toast提示框
		notify_view = (RelativeLayout)view.findViewById(R.id.notify_view);
		notify_view_text = (TextView)view.findViewById(R.id.notify_view_text);
		item_textview.setText(text);
		return view;
	}

	private void initData() {
		newsList = Constants.getNewsList();
	}
	
	Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			switch (msg.what) {
			case SET_NEWSLIST:
				detail_loading.setVisibility(View.GONE);
				if(mAdapter == null){
					mAdapter = new NewsAdapter(activity, newsList);
					//判断是不是城市的频道
					if(channel_id == Constants.CHANNEL_CITY){
						//是城市频道
						mAdapter.setCityChannel(true);
						initCityChannel();
					}
				}
				mListView.setAdapter(mAdapter);
				mListView.setOnScrollListener(mAdapter);
				mListView.setPinnedHeaderView(LayoutInflater.from(activity).inflate(R.layout.list_item_section, mListView, false));
				mListView.setOnItemClickListener(new OnItemClickListener() {

					@Override
					public void onItemClick(AdapterView parent, View view,
							int position, long id) {
						Intent intent = new Intent(activity, DetailsActivity.class);
						if(channel_id == Constants.CHANNEL_CITY){
							if(position != 0){
								intent.putExtra("news", mAdapter.getItem(position - 1));
								startActivity(intent);
								activity.overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
							}
						}else{
							intent.putExtra("news", mAdapter.getItem(position));
							startActivity(intent);
							activity.overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
						}
					}
				});
				if(channel_id == 1){
					initNotify();
				}
				break;
			default:
				break;
			}
			super.handleMessage(msg);
		}
	};
	
	/* 初始化选择城市的header*/
	public void initCityChannel() {
		View headview = LayoutInflater.from(activity).inflate(R.layout.city_category_list_tip, null);
		TextView chose_city_tip = (TextView) headview.findViewById(R.id.chose_city_tip);
		chose_city_tip.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(activity, CityListActivity.class);
				startActivity(intent);
			}
		});
		mListView.addHeaderView(headview);
	}
	
	/* 初始化通知栏目*/
	private void initNotify() {
		new Handler().postDelayed(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				notify_view_text.setText(String.format(getString(R.string.ss_pattern_update), 10));
				notify_view.setVisibility(View.VISIBLE);
				new Handler().postDelayed(new Runnable() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
						notify_view.setVisibility(View.GONE);
					}
				}, 2000);
			}
		}, 1000);
	}
	/* 摧毁视图 */
	@Override
	public void onDestroyView() {
		// TODO Auto-generated method stub
		super.onDestroyView();
		Log.d("onDestroyView", "channel_id = " + channel_id);
		mAdapter = null;
	}
	/* 摧毁该Fragment,一般是FragmentActivity 被摧毁的时候伴随着摧毁 */
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.d(TAG, "channel_id = " + channel_id);
	}
}
  •   赞(8) 赞 +1 赞(8) 已赞
  •   收藏(40) 收藏 +1 已收藏 取消
  •   下载(2019)
评论(96)
二马小迪

二马小迪 2017-07-26 17:09:42

学习学习啊!
回复(0) 赞(0) 赞(1)
拖拉机也是车

拖拉机也是车 2017-05-25 16:06:42

太贵,还不怎么好
回复(0) 赞(0) 赞(1)
Tom1982

Tom1982 2017-03-01 14:19:16

看起来还不错,好贵啊,其它都是免费,这个收10块
回复(0) 赞(0) 赞(1)
王者清风

王者清风 2017-01-12 18:00:20

只能说TMD的是骗人的!
回复(0) 赞(0) 赞(1)
沙漠公主

沙漠公主 2016-11-29 14:05:28

乱码,不能调试运行
回复(0) 赞(0) 赞(1)
  • 推荐
  • 审核
  • 收录
  • 获取活力值

源码上传作者

  • 32 能力值
  • 16 源码
  • 0 评测
  • 1 资料

热门源码