关于知乎新闻案例的模仿

1.ToolBar

参看该文章http://www.jianshu.com/p/79604c3ddcae
项目参看: SystemUITest

2.RecyclerView

http://www.jianshu.com/p/f592f3715ae2

  • Android中的自定义属性
    http://blog.csdn.net/lmj623565791/article/details/45022631
    其中有点问题的是:就我写的例子而言
    关于引用自定义控件的命名空间,是放在自定义控件下的(没问题),而不是放在布局根节点下的。代码如下:



    


关于命名空间参考:http://blog.csdn.net/janice0529/article/details/34425549

TypedArray是(存放attrs列出的属性值)方便直接取出

public class CustomView extends View {
    private static final String TAG=CustomView.class.getSimpleName();
    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        //Return a TypedArray holding the attribute values in set that are listed in attrs.
        //返回一个TypedArray(存放attrs列出的属性值)
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.test);
        String text = ta.getString(R.styleable.test_text);//别忘了是放在styleable之下的
        int textAttr = ta.getInteger(R.styleable.test_textAttr, -1);
        Log.e(TAG, text+"----"+textAttr );

        ta.recycle();
    }
}

关于第一篇博文中用数组存储attr的属性值,并用TypedArray通过下标获取对应的属性值
会出现一个bug:

Error: Expected resource of type styleable

解决方法如下:在使用 TypedArray 的方法处
加上 @SuppressWarnings("ResourceType")

 @SuppressWarnings("ResourceType")

案例代码

//在这儿加的
@SuppressWarnings("ResourceType")
public class CustomVewActivity extends View {
    private static final String TAG = CustomVewActivity.class.getSimpleName();
    private static final int[] mAttrs = {R.attr.test3, R.attr.test4};

    public CustomVewActivity(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray ta = context.obtainStyledAttributes(attrs, mAttrs);
        String test3 = ta.getString(0);
        int test4 = ta.getInteger(1, -1);

        Log.e(TAG, test3+"--"+test4 );
        ta.recycle();
    }
}


  • 加入分割线
    参看:http://www.jianshu.com/p/4eff036360da
    和鸿洋大神的http://blog.csdn.net/lmj623565791/article/details/45059587

getItemOffsets():从字面意思就是Item要偏移, 由于我们在Item和Item之间加入了分隔线,线其实本质就是一个长方形,也是用户自定义的,既然线也有长宽高,就画横线来说,上面的Item加入了分隔线,那下面的Item就要往下平移,平移的量就是分隔线的高度。

  • 关于分割线后续实际代码

上面两篇已经讲得很清楚了,原理就是第一篇博文写的那样,很清晰明白,需要注意的问题是在列表方向是垂直的时候(一般为默认),需要画水平线,第一篇博文思路很清晰,问题在于列表方向是垂直的时候,item应该向下平移

3. DrawingCache

关于知乎新闻案例的模仿_第1张图片
缓存视图.png

关于这段代码其中用到DrawingCache,官网API解释:

void setDrawingCacheEnabled (boolean enabled)

Enables or disables the drawing cache. When the drawing cache is enabled, the next call to getDrawingCache() or buildDrawingCache() will draw the view in a bitmap. Calling [draw(android.graphics.Canvas)]
will not draw from the cache when the cache is enabled. To benefit from the cache, you must request the drawing cache by calling getDrawingCache()
and draw it on screen if the returned bitmap is not null.

关于参数:
boolean enabled: true to enable the drawing cache, false otherwise

在http://1137907860.blog.51cto.com/10452906/1682078中说到

若想更新cache, 必须要调用destoryDrawingCache方法把旧的cache销毁,才能建立新的。
>当调用setDrawingCacheEnabled方法设置为false, 系统也会自动把原来的cache销毁。

对比看
http://souly.cn/%E6%8A%80%E6%9C%AF%E5%8D%9A%E6%96%87/2016/01/05/DrawingCache%E8%A7%A3%E6%9E%90/

有点不同暂时先记录吧

4.ObjectAnimation

关于这部分之前已经接触过而且比较简单,只是实现一下动画的类型直接参看下面一篇文章即可
http://blog.csdn.net/dingfengnupt88/article/details/51556597

透明度(alpha)

关于知乎新闻案例的模仿_第2张图片
透明度.png

代码实现如上:该示例代码并没有在onAnimationEnd中实现相应函数

5.ViewStub

参看
http://souly.cn/%E6%8A%80%E6%9C%AF%E5%8D%9A%E6%96%87/2015/09/18/ViewStub%E7%94%A8%E6%B3%95%E5%88%86%E6%9E%90/

1.用途:
最大的用途就是实现View的延迟加载,在需要使用的时候再加载view
在这个项目中作者是用来显示网络通知的(平时不需要显示,在无网络时使view可见)
2.特点
ViewStub inflate之后就会变成空的(所以点击第一次按钮textView会显示出来,第二次点击会报空指针异常 最好加一个非空判断

关于知乎新闻案例的模仿_第3张图片
StubActivity实现.png

你可能感兴趣的:(关于知乎新闻案例的模仿)