Giter Site home page Giter Site logo

lozn00 / giftanim Goto Github PK

View Code? Open in Web Editor NEW
135.0 4.0 16.0 3.31 MB

直播礼物动画 送赞送礼物动画 仿映客礼物动画侧栏弹出送花人和礼物以及x1 x2 x3效果,支持队列 排序

Java 100.00%
livegift livechat livelayout gift gift-cards live

giftanim's Introduction

图片演示

演示图片地址

演示图片地址

视频demo演示

http://v.youku.com/v_show/id_XMjg3ODMyNDc3Ng==.html?spm=a2h3j.8428770.3416059.1 #Live giftanim 经典的直播礼物动画 你值得拥有!

集成起来非常简单

使用方法
 compile 'cn.qssq666:giftanim:0.4'

如果0.4用不了用0.3 还是用不了请联系我,我不打算用jcenter了,最近其他库都出现了毛病.. 布局定位到与与一条线对齐并包裹内容,或者外面嵌套一个帧布局然后底部对齐也是可以的。 `

	   <cn.qssq666.giftmodule.periscope.GiftAnimLayout
	        android:id="@+id/giftlayout"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        android:layout_above="@+id/line"></cn.qssq666.giftmodule.periscope.GiftAnimLayout>

`

您可以完全不用设置,也可以设置,

`

   giftAnimLayout.setOnGiftBarClick(new GiftAnimLayout.OnGiftBarClick() {
        @Override
        public void onClick(UserInfoI userInfo) {
            Toast.makeText(MainActivity.this, "你点击了" + userInfo.getName(), Toast.LENGTH_SHORT).show();
        }
    });
    giftAnimLayout.setGiftAdapterAndCallBack(new GiftBarAdapter());//具体作用看GiftBarAdapter注释
    giftAnimLayout.setMaxShowCount(3);
    giftAnimLayout.setHidenAnim(R.anim.follow_anim_from_left_vertical_hidden);//  giftAnimLayout.setHidenAnim(R.anim.follow_anim_from_left_to_right_hidden);
    giftAnimLayout.setShowDuration(6000);
    giftAnimLayout.setThanMaxWait(false);//

`

首先项目是2016年写的,后面都废弃了 最近又做直播了,但是我发现我这个东西还有很多bug,经过修修改改,终于达到了我想要的效果。 代码实现也比较简单。

另外我感觉开源是我继续敲代码的动力,希望各位多多点赞,让更多人知道 力图最简单的方式 最快的速度实现需求 简单易懂方便扩展和抽取 是我的目标 和理想。

  • 支持gift图片地址
  • 支持自己维护x1 x2总数
  • 支持x1 x2条件调节
  • 上面所有的方法都不是必须填写的 都默认已经调整好。
  • 支持礼物动画 x1 x2 x3 缩放效果
  • 支持自定义 显示动画 和移除动画 移除动画已经上了例子。
  • 支持自己维护x1 x2 x3
  • 支持最新礼物自动插底显示 2017-07-09 完工
  • 支持礼物总数爆表压力测试,将自动排队
  • 确保所有礼物执行完毕
  • 支持交叉显示动画 已显示的又收到了和另外一个已显示交叉位置 2017-07-09 完工
  • 支持view缓存 2017-07-09 完工
  • 支持自定义布局扩展
  • 支持自定义图片加载方式 2017-07-08完工
  • 支持扩展 ,简单的布局动画用户轻松扩展
  • 方便自定义 礼物的x1 x2 x3是由 userid和礼物地址控制的如果不需要连x的动画可以让每一个礼物返回的key不一样 继承礼物动动画类,复写这个方法,就行这个方法叫ggetKey(UserInfoI userInfo, GiftModelI giftModel)可以返回一个时间戳就行,
  • 支持自定义交叉值控制 当礼物已存在但不在最靠屏幕中间的,如果 这个礼物超过了最靠屏幕中间已经积累的值的指定大小就发生一次交叉动画 ,setAcrossDValue 比如设置5 如果不管是多少度交叉就设置更大的数值或者设置为Integer的最大值

简单的接口实现 giftmodel userinfo,用户轻松解耦,

唯一标识 是由userInfo的getUserid+礼物地址组成

setGiftAdapterAndCallBack 可以实现高度定置化



点赞动画布局

`			
			
			  cn.qssq666.giftanim.periscope.FavorLayout
			        android:id="@+id/favorlayout"
			        android:layout_width="match_parent"
			        android:layout_height="match_parent"
			        android:layout_marginLeft="@dimen/theme_margin"
			        android:layout_marginTop="@dimen/theme_margin" />
			
			
`

触发点赞代码逻辑

`

 	  favorLayout.addFavor();

`


礼物动画定制化演示




				  
				public class GiftBarAdapter implements GiftAnimLayout.GiftCallBack {
				
				
				    private static final String TAG = "GiftBarAdapter";
				
				    @Override
				    public void onGiftAnimOver(GiftModelI giftModel) {
				        ((GiftDemoModel) giftModel).setShowcount(0);//如果是0则会直接设置为1的
				        Log.w(TAG, "onGiftAnimOver:" + giftModel);
				    }
				
				    @Override
				    public void onFindExistGiftAnim(GiftModelI giftModel) {
				//                ((GiftModel) giftModel).setShowcount(1);
				        Log.w(TAG, "onFindExistGiftAnim:" + giftModel);
				
				    }
				
				    @Override
				    public void onAddNewGift(GiftModelI giftModel) {
				        Log.w(TAG, "onAddNewGift:" + giftModel);
				
				    }
				
				    @Override
				    public void onAddWaitUnique(GiftModelI giftModel) {
				        Log.w(TAG, "onAddWaitUnique:" + giftModel);
				
				    }
				
				    @Override
				    public int onRequestShowGiftCount(GiftModelI modelI, StrokeTextView tvValue) {
				        int showcount = ((GiftDemoModel) modelI).getShowcount();//如果一直返回0还是由内部支持
				//                showcount = showcount == 0 ? tvValue.getValue() + 1 : showcount;
				        Log.w(TAG, "onRequestShowGiftCount :showCount:" + showcount);
				//                showcount = showcount == 0 ? tvValue.getValue() + 1 : showcount;
				        return showcount;
				    }
				
				    @Override
				    public ViewGroup getGiftLayout(GiftAnimLayout giftAnimLayout) {
				        //返回null表示内部本来就有的那个
				        return (ViewGroup) LayoutInflater.from(giftAnimLayout.getContext()).inflate(R.layout.view_live_gift_bar_prescro, giftAnimLayout, false);
				    }
				
				    /**
				     * 返回false表明内部进行绑定图片 那么这里就没必要再进行处理了。但是这里要维护的话头像也给维护了哈!
				     *
				     * @param userInfo
				     * @param giftModel
				     * @param giftHolder
				     * @return
				     */
				    @Override
				    public boolean onBindPic(UserInfoI userInfo, GiftModelI giftModel, GiftAnimLayout.GiftHolder giftHolder) {
				        ImageLoader.getInstance().displayImage(userInfo.getFace(), giftHolder.ivFace);
				        Uri uri = Uri.parse("" + giftModel.getGiftImage());
				   /*
				        com.facebook.drawee.view.SimpleDraweeView
				                draweeView = (SimpleDraweeView) giftHolder.ivGift;
				        draweeView.setAspectRatio(1);
				        draweeView.setImageURI(uri);
				*/
				
				
				        SimpleDraweeView draweeView = (SimpleDraweeView) giftHolder.ivGift;
				        draweeView.setAspectRatio(1);
				        DraweeController draweeController =
				                Fresco.newDraweeControllerBuilder()
				                        .setUri(uri)
				                        .setAutoPlayAnimations(true) // 设置加载图片完成后是否直接进行播放
				                        .build();
				        draweeView.setController(draweeController);
				        return true;
				    }
				}



上面的注释很清楚了。默认的imageloader已经维护好加载了,如果要gift动画 那么就是上面的例子效果了。


  实际上demo的代码已经设置好了adapterAndCallBack 您也可以完全不用设置,然后跑跑代码 也没毛病。 哈哈。

自定义布局 等 就是new一个 callback 

    giftAnimLayout.setGiftAdapterAndCallBack(new GiftBarAdapter());//具体作用看GiftBarAdapter注释

giftanim's People

Contributors

lozn00 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

giftanim's Issues

大礼物

老铁,大礼物有没有好的解决办法?比如飞机,跑车

礼物出现先后顺序错乱

我先送的礼物。后显示,后送的礼物先显示。在礼物出现一次显示不了的时候会出现。
if (!allowAcrossAnimBug)
{
if (mLayoutAniming || System.currentTimeMillis() - mCurrentLayoutAnimEndTime < mLayoutAnimTime)
{
Log.w(TAG, "布局动画尚未结束 进行循环等待中..");
postDelayed(new Runnable()
{
@OverRide
public void run()
{
if (mLayoutAniming || System.currentTimeMillis() - mCurrentLayoutAnimEndTime < mLayoutAnimTime)
{
postDelayed(this, 200);
}
else
{
Log.w(TAG, "布局动画等待结束了开始新的礼物动画.");
showNewGift(context, userInfo, giftModel);
}
}
}, 200);
return;
}
}
这里这么写。会不会出现顺序不对的情况??

连击时的效果感觉不太好

当前项目连击时的效果是最下方的礼物有连击效果,如果上面的礼物发生连击的话,就将礼物移到下方连击,这样的效果看起来非常糟糕,因为假如有两个人或者3个人都在连击的话,那么礼物就处于不断变换位置又不断在连击中,这样的效果十分不美观

无法自定义礼物数量

例如 : 张三 送给 李四 X 10

设置 model.setShowcount(number);

在adapter 设置 了数量也不行
public int onRequestShowGiftCount(GiftModelI modelI, StrokeTextView tvValue) {
int showcount = ((GiftDemoModel) modelI).getShowcount();//如果一直返回0还是由内部支持
tvValue.setValue(showcount);
tvValue.getBorderTextView().setText(showcount+"");
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.