之前需要做一个滚动居中放大得效果没什么思路,得朋友推荐github上的开源项目SlidingBall最终做成了想要的效果。
原github项目 https://github.com/dalong982242260/SlidingBall,原主的两种实现方式都很赞值得推广学习。
这篇博文我分享一下集成方法和遇到的问题解决,(以Galley篇为例)。
1.下载module。在上述 github源码 或 http://git.oschina.net/pingde/MyCircleViewGalley 可以下载到
在你的项目(建议先新建一个demo试试水)
2.File --> New --> Import Moduel 导入项目,获得模块coverflow
添加依赖可以 在app 里面的buildle.gradle里面
compile 'com.dalong.coverflow:coverflow:1.0.0'
或者右键app,Open Module Setting, Dependecies里点“+”ModuleLibrary,效果是一样的。
这时候遇到的第一个问题
解决办法是在根目录的build.gradle的dependencies里面添加代码行
classpath 'com.novoda:bintray-release:0.3.4'
原因写博的时候忘了,好像与原主提交代码到平台有关。还有一个万金油方法,集成一个modulede之前,先把module里面的builder.gradle的除Android{}和dependencies{}以外都删掉,一般都很见效。总之项目列表的显示coverflow和app一样黑粗就表示集成成功了。
3.另外一个module .原作者的项目用了一个实现原图的module,如果不添加会报错,这部分源码很简单,自己的项目里用不着圆图就可以不添加,或者干脆让UI做圆形的png也是一样的。但是添加CircIeImageView也会有个问题,使用那个项目要给他声明一下像版权一样。不然没法用。像上面一样集成会报错
打开circleimageview的build.gradle 删除 下面这行,clean一下就行。正式项目还是需要尊重人家的劳动成果吧。
apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle'
4.使用module,布局展示,为了效果也做一个横屏。
每个滑动的原图可以使实体类Circleitem,包含name ,img,Intent等属性,再看MainActivity里面我用了与原主不一样的一个地方,mFancy的监听器,原主分别设置了卡片为OnCheckChangeListernr和卡片里面的Button 的OnClickListener,照搬原项目有一点点问题就是左右滑动和点击没有处理好,卡片不可点击还可以接受,但是button上不能滑动操作感不行。我选择的是为mFancy设置OnItemClickListener,整个item可滑可点爽歪歪的。另外要求显示item数目可以在源码中修改很是方便。希望能对大家有所帮助。O(∩_∩)O
public class MainActivity extends AppCompatActivity { private FancyCoverFlow mFancy; private MyFancyCoverFlowAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWinget(); mFancy = (FancyCoverFlow) findViewById(R.id.fancycoverflow); } private void initWinget() { 。。。此处省略n行代码 adapter = new MyFancyCoverFlowAdapter(this, fancyCoverFlows); mFancy.setAdapter(adapter); mFancy.setUnselectedAlpha(0.3f);//通明度0.5 mFancy.setUnselectedSaturation(0.5f);//设置选中的饱和度 mFancy.setUnselectedScale(0.3f);//设置选中的规模 mFancy.setSpacing(0);//设置间距 mFancy.setMaxRotation(0);//设置最大旋转 mFancy.setScaleDownGravity(0.5f); mFancy.setActionDistance(FancyCoverFlow.ACTION_DISTANCE_AUTO); mFancy.setSelection(2); mFancy.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (mFancy.getSelectedItemPosition() == position) { Toast.makeText(MainActivity.this,"当前选中的是"+fancyCoverFlows.get(position).getName(),Toast.LENGTH_SHORT).show(); startActivity(fancyCoverFlows.get(position).getIntent()); } } }); }