android 网易新闻代码,仿网易新闻效果android源码分析

一直想知道这种效果到底是如何做出来的,直到看到代码,原来还是动画。从网上找了两份代码,原理基本相同,两份代码中应该有相互参考部分,现在简单解析下,做一个记录,另外,代码中做了些许不妨碍功能的修改(如果有时间的话,自己也会考虑用fragment实现下)。先看下效果图:

214302H24-0.png

这里主要讲解的是以下部分:

1352296799_5521.jpg

先看下注释里面的说明:/**

* Android实现局部图片滑动指引效果

* @Description: 实现以下功能:

* 1、顶部单张图片左右拖拉滑动;

* 2、带指引;

* 3、仅滑动顶部单张图片,不滑动页面,下面的图文内容不动;

* 4、类似于新闻客户端的功能

看下它的主Activity里面的全局变量(也就是上面图形):public class MainActivity extends ActivityGroup implements OnClickListener{

// 选中的新闻条目

private TextView mSelectedItem = null;

// 头部新闻条目的Layout

private RelativeLayout mHeader = null;

// 中间新闻主体的Layout

private RelativeLayout mNewsMainLayout = null;

private LayoutParams params = null;

//顶部提示

private TextView mNetEaseTop = null;

// 新闻分类

private TextView mNewsItem = null;

private TextView mInfoItem = null;

private TextView mBlogItem = null;

private TextView mMagezineItem = null;

private TextView mDomainItem = null;

private TextView mMoreItem = null;

// 新闻分类中每条分类的宽度

private int mItemWidth = 0;

// 条目背景移动开始位置

private int startX = 0;

private Intent mIntent = null;

// 设置新闻主题

private View mNewsMain = null;

注释比较详细。可以看到这个activity继承自activityGroup类,而activityGroup类在3.0以后是deprecated,所以在开头说想要用fragment重新实现一下。Deprecated. Use the new Fragment and FragmentManager APIs instead; these are also available on older platforms through the Android compatibility package.

再看onCreate方法:@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 初始化控件

initeViews();

}

/**

* 初始化控件

*/

private void initeViews(){

mNewsItem = (TextView) findViewById(R.id.tv_title_news);

mInfoItem = (TextView) findViewById(R.id.tv_title_info);

mBlogItem = (TextView) findViewById(R.id.tv_title_blog);

mMagezineItem = (TextView) findViewById(R.id.tv_title_magazine);

mDomainItem = (TextView) findViewById(R.id.tv_title_domain);

mMoreItem = (TextView) findViewById(R.id.tv_title_more);

mNewsItem.setOnClickListener(this);

mInfoItem.setOnClickListener(this);

mBlogItem.setOnClickListener(this);

mMagezineItem.setOnClickListener(this);

mDomainItem.setOnClickListener(this);

mMoreItem.setOnClickListener(this);

// 设置选中条目属性

mSelectedItem = new TextView(this);

mSelectedItem.setText(R.string.title_news_category_tops);

mSelectedItem.setTextColor(Color.WHITE);

mSelectedItem.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17);

mSelectedItem.setGravity(Gravity.CENTER);

mSelectedItem.setWidth((getScreenWidth() - DimensionUtility.dip2px(this, 20)) / 6);

mSelectedItem.setBackgroundResource(R.drawable.slidebar);

RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(

LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

param.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);

mHeader = (RelativeLayout) findViewById(R.id.layout_title_bar);

mNetEaseTop = (TextView) findViewById(R.id.tv_netease_top);

mHeader.addView(mSelectedItem, param);

// 设置头条新闻主体

mIntent = new Intent(MainActivity.this, TopicNews.class);

mNewsMain = getLocalActivityManager().startActivity(

"TopicNews", mIntent).getDecorView();

params = new LayoutParams(

LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

mNewsMainLayout = (RelativeLayout) findViewById(R.id.layout_news_main);

mNewsMainLayout.addView(mNewsMain, params);

}

这里所说的选中条目,就是上图中,选中的高亮部分,它其实可以理解为和下面六个是上下两层的关系。而mNetEaseTop是指的

1352303054_4658.jpg

这一块内容,在原代码中,作者并未做这一块和下面内容的同时更新,个人后来加上。设置头条新闻主题下面就是设置默认选择项:第一项(头条新闻)。

再来看一下里面用到的布局文件:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

android:weightSum="10" >

android:id="@+id/header"

layout="@layout/header" />

android:id="@+id/layout_news_main"

android:layout_width="fill_parent"

android:layout_height="0dp"

android:layout_weight="9" >

android:id="@+id/layout_bottom"

android:layout_weight="1"

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

android:id="@+id/radiogroup"

android:layout_width="fill_parent"

android:layout_height="0dp"

android:background="@drawable/bottombg"

android:gravity="center_vertical"

android:orientation="horizontal" >

android:id="@+id/radio_news"

android:layout


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部