crazysunj / cardslideview Goto Github PK
View Code? Open in Web Editor NEW一行代码实现ViewPager卡片效果,比ViewPager2更强大,底层同样是RecyclerView
License: Apache License 2.0
一行代码实现ViewPager卡片效果,比ViewPager2更强大,底层同样是RecyclerView
License: Apache License 2.0
可以做到自动轮播吗
你好,问一下该控件支持,自定义设置显示多少张卡片吗?目前好像只显示3张,我试了 CardSlideView 的 card_page_limit 但是好像没用?
在myhandler中
private HashMap<Integer,CheckBox> boxHashMap=new HashMap<>();
在onbind方法里有一个
boxHashMap.put(position,box);
当锁屏的时候会报错,
FATAL EXCEPTION: main
Process: cn.xiaowa.qy, PID: 25695
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = cn.xiaowa.qy.ui.service.hander.MyCardListHander)
at android.os.Parcel.writeSerializable(Parcel.java:1394)
at android.os.Parcel.writeValue(Parcel.java:1341)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:644)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313)
at android.os.Bundle.writeToParcel(Bundle.java:1034)
at android.os.Parcel.writeBundle(Parcel.java:669)
at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:148)
at android.os.Parcel.writeTypedArray(Parcel.java:1197)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:564)
at android.os.Parcel.writeParcelable(Parcel.java:1363)
at android.os.Parcel.writeValue(Parcel.java:1268)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:644)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313)
at android.os.Bundle.writeToParcel(Bundle.java:1034)
at android.os.Parcel.writeBundle(Parcel.java:669)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3020)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3481)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:147)
at android.app.ActivityThread.main(ActivityThread.java:5531)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:970)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:765)
Caused by: java.io.NotSerializableException: android.support.v7.widget.AppCompatCheckBox
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
at java.util.HashMap.writeObject(HashMap.java:976)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1033)
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360)
at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054)
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
at android.os.Parcel.writeSerializable(Parcel.java:1389)
at android.os.Parcel.writeValue(Parcel.java:1341)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:644)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313)
at android.os.Bundle.writeToParcel(Bundle.java:1034)
at android.os.Parcel.writeBundle(Parcel.java:669)
at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:148)
at android.os.Parcel.writeTypedArray(Parcel.java:1197)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:564)
at android.os.Parcel.writeParcelable(Parcel.java:1363)
at android.os.Parcel.writeValue(Parcel.java:1268)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:644)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313)
at android.os.Bundle.writeToParcel(Bundle.java:1034)
at android.os.Parcel.writeBundle(Parcel.java:669)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3020)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3481)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:147)
at android.app.ActivityThread.main(ActivityThread.java:5531)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:970)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:765)
pad 怎么适配
我是用android studio的内存监测发现的,一直快速滑动,内存占用会一直飙升。
java.lang.IllegalStateException: Fragment already active
at android.support.v4.app.Fragment.setInitialSavedState(Fragment.java:581)
at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:114)
at com.crazysunj.cardslideview.CardPagerAdapter.instantiateItem(CardPagerAdapter.java:62)
如题,报错为: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ff.pp.cardslide/com.ff.pp.cardslide.MainActivity}: java.lang.RuntimeException: please bind the handler !
检查了一下,找不出原因,在bind()时,new了Handler的。第一启动,屏幕不旋转时是没问题的。
1:把act改横向
2:左滑动的时候,回弹很快,必须画到中间才固定中间位置
3:右滑动情况下,只要稍微滑动一下,就会滑过去了,而且是滑了2个item。不是一个
仔细看了作者实现无限循环的方法,不明白在CardViewPager类对List集合的的计算和在CardPagerAdapter类对无限循环的实现,还望大佬帮忙解答下,先谢谢了。
跟踪了一下代码, 发现 GalleryLayoutManager 中如果判断 mOnPageChangeListener 为null , 会导致不更新 mCurItem , 通过 setOnPageChangeListener 接口设置一个 listener 之后才能够更新 mCurItem , 个人理解 listener 为非必须条件.
你好,请问为啥卡片必须是 6 个以上,为什么要做这个判断?
您好,大哥,
我用您写的这个控件,要实现一个历史日签功能:首先把循环关掉,页面第一张卡片显示最近日期的打卡日签,然后右侧没有卡片,历史日签顺序在最近卡片的左侧。
就是这样一个需求,现在做到了 历史日签都在最近日签的右侧,有快捷的方式调换顺序吗?
不能的话,如果修改 lib 包里的代码能不能给一下大概的思路?
感谢大哥
When i'm trying with scaling the Card View(current three cards) from current position to top of screen on scroll with list view. Like on scaling the mid card view changes its size but left and right view do not scale completely. They only scale their current part(only edges) with mid view. I want to scale the current view on scroll to top of screen so that three cards should be shown completely the top of screen.
Please help me how can I achieve that ?
大神,求助:我只要一调用这个方法
viewpager.bind(getSupportFragmentManager(), new MyCardHandler(),infoList);
然后我整个页面的所有按钮点击事件的页面跳转的功能都会崩,但是我的bean对象都是实现了Seraible接口的,求助,急急急!!!
当变换到switchCard这种模式,并且viewPager.setCardMargin(10);就崩溃了
Process: com.crazysunj.cardslide, PID: 1172
java.lang.IllegalStateException: Fragment already active
at android.support.v4.app.Fragment.setInitialSavedState(Fragment.java:631)
at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:114)
at com.crazysunj.cardslideview.CardPagerAdapter.instantiateItem(CardPagerAdapter.java:62)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1002)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1216)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1084)
at android.support.v4.view.ViewPager$3.run(ViewPager.java:267)
at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1997)
at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:2127)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2109)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2198)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2198)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2198)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2198)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2198)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2198)
at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
at android.app.Activity.dispatchTouchEvent(Activity.java:2820)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
at android.view.View.dispatchPointerEvent(View.java:9526)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4267)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4133)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3674)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3727)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3693)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3819)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3701)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3876)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3674)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3727)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3693)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3701)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3674)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5959)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5933)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5894)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6062)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:187)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:138)
at android.app.ActivityThread.main(ActivityThread.java:5523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteIn
还有个问题
margin设置为负数(-30) 快速滑动,例如像左快速滑动,有时在此页面的第三张图片和第二张图片大小一样,本来效果应该是第一张和第三张大小一样但是比第二张小
两张卡片之间的距离怎么调小呢
在MainActivity 使用 ,当跳其他App,或结束应用时,崩溃,activity跳转,finish activity 没问题.
有什么方式可以解决吗,急..
Process: ebf.school.babyvideos, PID: 14152
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = ebf.school.courses.MainActivity$MyCardHandler)
at android.os.Parcel.writeSerializable(Parcel.java:1316)
at android.os.Parcel.writeValue(Parcel.java:1264)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
at android.os.Bundle.writeToParcel(Bundle.java:1692)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.support.v4.app.FragmentState.writeToParcel(FragmentState.java:124)
at android.os.Parcel.writeTypedArray(Parcel.java:1133)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:639)
at android.os.Parcel.writeParcelable(Parcel.java:1285)
at android.os.Parcel.writeValue(Parcel.java:1204)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
at android.os.Bundle.writeToParcel(Bundle.java:1692)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2467)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3098)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.io.NotSerializableException: ebf.school.courses.MainActivity
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
at android.os.Parcel.writeSerializable(Parcel.java:1311)
at android.os.Parcel.writeValue(Parcel.java:1264)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
at android.os.Bundle.writeToParcel(Bundle.java:1692)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.support.v4.app.FragmentState.writeToParcel(FragmentState.java:124)
at android.os.Parcel.writeTypedArray(Parcel.java:1133)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:639)
at android.os.Parcel.writeParcelable(Parcel.java:1285)
at android.os.Parcel.writeValue(Parcel.java:1204)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
at android.os.Bundle.writeToParcel(Bundle.java:1692)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2467)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3098)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
多滑动几次很容易anr
DALVIK THREADS (15):
"main" prio=5 tid=1 Suspended
| group="main" sCount=1 dsCount=0 obj=0x79148f20 self=0xb4f08000
| sysTid=9901 nice=0 cgrp=apps sched=0/0 handle=0xb6f76ec8
| state=S schedstat=( 181551722040 15992658594 70977 ) utm=17913 stm=242 core=3 HZ=100
| stack=0xbe795000-0xbe797000 stackSize=8MB
| held mutexes=
at android.support.v4.view.ViewPager.populate(ViewPager.java:1067)
at android.support.v4.view.ViewPager.populate(ViewPager.java:952)
at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1973)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2310)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2371)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2371)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2371)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2371)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2371)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2371)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2568)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1776)
at android.app.Activity.dispatchTouchEvent(Activity.java:2866)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2529)
at android.view.View.dispatchPointerEvent(View.java:9180)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4734)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4572)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4096)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4149)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4115)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4229)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4123)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4286)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4096)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4149)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4115)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4123)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4096)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6600)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6484)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6455)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6690)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native method)
at android.os.MessageQueue.next(MessageQueue.java:143)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:5981)
at java.lang.reflect.Method.invoke!(Native method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
支持无限循环应该是有一个方法吧,但是我不知道是哪个方法啊,我的不能够无限循环啊,请多多指教!!!
在应用后台被杀死的情况下CardItem的mHanlder空,应该是fragment没有保存mHandler的值,导致应用恢复的时候为空,可以优化这部分代码。
中间滑动的图片宽高好像调整不了
public void bindHandler(CardHandler handler) {
Bundle bundle = getArguments();
if (bundle == null) {
bundle = new Bundle();
setArguments(bundle);
}
bundle.putSerializable(ARGUMENTS_HANDLER, handler);
}
这部分代码会有数据量传输过大知道崩溃的风险,望做优化!
而且也没讲清楚具体使用方法,我居然还在摸索之中。。。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.