黑马程序员技术交流社区

标题: (android高仿系列)今日头条 --新闻阅读器 (一) [打印本页]

作者: lizhenzhen    时间: 2016-5-31 22:39
标题: (android高仿系列)今日头条 --新闻阅读器 (一)
原文地址:http://blog.csdn.net/vipzjyno1/article/details/23591315


在模仿中循序渐进,以程序员角度去看待每一个APP是如何实现的,它有什么优缺点,并从中提升自己。
       之前发现很多人在群里面、论坛上求网易新闻客户端的源码,之后我就去下了个网易新闻客户端和今日头条新闻客户端,发现他们的大体是一样的,于是在最近的空闲时间,便去琢磨如何去实现这样一个APP。
要知道它们是如何实现的,用到了什么第三方库文件,反编译便是很好的一个了解方法,如果你想要了解如何反编译可以点击这个链接:反编译就这么简单
只是一般的APK打包后都是被混淆过的,所以没那么好了解他的每个界面是如何实现的,没事,那就自己慢慢摸索或则从它的资源文件中提取布局了解下整体的大概情况。
我通过反编译 --今日头条:

知道了它用到的架包有,提取了有用的部分:
1.Android-support-v4.jar (最常用的官方架包之一)
2.android-support-v7.jar (主要用于ActionBar的低版本兼容)
3.handmark.pulltorefresh.library  (图片的下拉刷新包)
4.slidingmenu.lib  (侧拉菜单包)   使用方法配置以及下载:点击这里
5.umeng (友盟的官方架包)
自己要在加用上的架包有:
1.Android-Universal-Image-Loader  (图片的异步加载包)   使用方法配置以及下载:点击这里
注:发现架包中有aaa什么的命名,说明它被混淆过,所以要想进一步获取它的源码很困难,只能按照自己的思路去走。

好的,大体了解了它的整体结构,下面就开始它是如何开发的把:
注:本代码内用到的资源文件和属性配置部分从APK反编译的资源(SRC文件)中提取,为了达到更好的实现效果。
一.首先构建大体的框架,架包等用到的时候在导入
命名规范可以参考:android命名规范

二.进行配置

首先去掉应用的title栏目:
采取修改AndroidManifest.xml文件中application的android:theme="@style/AppTheme"属性:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
<style name="AppTheme" parent="AppBaseTheme">  
    <item name="android:windowNoTitle">true</item>  
</style>  
三.开始开发
设置欢迎界面的调整动画,2秒
[java] view plain copy 在CODE上查看代码片派生到我的代码片
  start_anima = new AlphaAnimation(0.3f, 1.0f);  
start_anima.setDuration(2000);  
view.startAnimation(start_anima);  
start_anima.setAnimationListener(new AnimationListener() {  
      
    @Override  
    public void onAnimationStart(Animation animation) {  
        // TODO Auto-generated method stub  
         
    }  
      
    @Override  
    public void onAnimationRepeat(Animation animation) {  
        // TODO Auto-generated method stub  
         
    }  
      
    @Override  
    public void onAnimationEnd(Animation animation) {  
        // TODO Auto-generated method stub  
        redirectTo();//跳转  
    }  
});  
之后便是主界面:

可以发现主界面上方的栏目栏是可以横向拖动的,并且选择。

下面就首先来实现上部栏目拖动这个效果:
大体思路结构图:

整体的布局文件是如下这样:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
<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>  
由于发现HorizontalScrollView左右拖动的时候没有那种阴影效果,所以在这里,我们发现了头条的资源文件下有这么2个文件:

这个就是它在白天模式和黑夜模式下用的阴影图片。那我们可以采取重写HorizontalScrollView来判断滚动,如果滚动时候不是在最左边,显示左边阴影,不是在最右边,显示右边阴影。

作者: lizhenzhen    时间: 2016-5-31 22:40
由于帖子字数限制大家可以看原文 地址:http://blog.csdn.net/vipzjyno1/article/details/23591315




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2