Coolfensi科技头像

Coolfensi科技

客服VX:coolfensi,客服QQ:2451468936(QQ/微信客服只做引导和站点通知,不闲聊。有站点内业务疑问以及订单问题的话,请点击【CL-在线售后客服窗口】进行会话)

  • 文章98683
  • 阅读8924843

人生倒计时

  • 今日已经过去小时
  • 这周已经过去
  • 本月已经过去
  • 今年已经过去个月
首页 最新知识 正文内容

海外抖音点赞源码(海外版点赞源码)

客服VX(coolfensi) 最新知识 2023-03-31 02:03:10 58

Android双击飞小心心-仿抖音点赞

具体的需求就是双击视频任意位置可以冒出向上飞的小心心.之前写的太模糊,回来详细编辑一次,末尾附上源码好了.

自定义一个RelativeLayout,点击其内部任意一位置,将其坐标传入自定义布局,然后add一个?的view,并给这个?加上动画.

public class Love extends RelativeLayout {

private Context context;

    private LayoutParams params;

    private Drawable[]icons =new Drawable[4];

    private Interpolator[]interpolators =new Interpolator[4];

    private int mWidth;

    private int mHeight;

    public Love(Context context, AttributeSet attrs) {

super(context, attrs);

        this.context =context;

        initView();

    }

private void initView() {

// 图片资源

        icons[0] = getResources().getDrawable(R.drawable.heart_red);

        icons[1] = getResources().getDrawable(R.drawable.heart_red);

        icons[2] = getResources().getDrawable(R.drawable.heart_red);

        icons[3] = getResources().getDrawable(R.drawable.heart_red);

        // 插值器

        interpolators[0] =new AccelerateDecelerateInterpolator(); // 在动画开始与结束的地方速率改变比较慢,在中间的时候加速

        interpolators[1] =new AccelerateInterpolator();  // 在动画开始的地方速率改变比较慢,然后开始加速

        interpolators[2] =new DecelerateInterpolator(); // 在动画开始的地方快然后慢

        interpolators[3] =new LinearInterpolator();  // 以常量速率改变

    }

public void addLoveView(float x, float y) {

if (x 100) {

x =101;

        }

if (y 100) {

y =101;

        }

mWidth = (int) (x -100);

        mHeight = (int) (y -100);

        final ImageView iv =new ImageView(context);

        params =new LayoutParams(200, 200);

        iv.setLayoutParams(params);

        iv.setImageDrawable(icons[new Random().nextInt(4)]);

        addView(iv);

        // 开启动画,并且用完销毁

        AnimatorSet set = getAnimatorSet(iv);

        set.start();

        set.addListener(new AnimatorListenerAdapter() {

@Override

            public void onAnimationEnd(Animator animation) {

// TODO Auto-generated method stub

                super.onAnimationEnd(animation);

                removeView(iv);

            }

});

    }

/**

    * 获取动画集合

    *

    * @param iv

    */

    private AnimatorSet getAnimatorSet(ImageView iv) {

// 1.alpha动画

        ObjectAnimator alpha =ObjectAnimator.ofFloat(iv, "alpha", 0.3f, 1f);

        // 2.缩放动画

        ObjectAnimator scaleX =ObjectAnimator.ofFloat(iv, "scaleX", 0.2f, 1f);

        ObjectAnimator scaleY =ObjectAnimator.ofFloat(iv, "scaleY", 0.2f, 1f);

        // 动画集合

        AnimatorSet set =new AnimatorSet();

        set.playTogether(alpha, scaleX, scaleY);

        set.setDuration(2000);

        // 贝塞尔曲线动画

        ValueAnimator bzier = getBzierAnimator(iv);

        AnimatorSet set2 =new AnimatorSet();

        set2.playTogether(set, bzier);

        set2.setTarget(iv);

        return set2;

    }

/**

    * 贝塞尔动画

    */

    private ValueAnimator getBzierAnimator(final ImageView iv) {

// TODO Auto-generated method stub

        PointF[]PointFs = getPointFs(iv); // 4个点的坐标

        BasEvaluator evaluator =new BasEvaluator(PointFs[1], PointFs[2]);

        ValueAnimator valueAnim =ValueAnimator.ofObject(evaluator, PointFs[0], PointFs[3]);

        valueAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

            public void onAnimationUpdate(ValueAnimator animation) {

// TODO Auto-generated method stub

                PointF p = (PointF)animation.getAnimatedValue();

                iv.setX(p.x);

                iv.setY(p.y);

                iv.setAlpha(1 -animation.getAnimatedFraction()); // 透明度

            }

});

        valueAnim.setTarget(iv);

        valueAnim.setDuration(2000);

        valueAnim.setInterpolator(interpolators[new Random().nextInt(4)]);

        return valueAnim;

    }

private PointF[]getPointFs(ImageView iv) {

// TODO Auto-generated method stub

        PointF[]PointFs =new PointF[4];

        PointFs[0] =new PointF(); // p0

        PointFs[0].x = ((int)mWidth);

        PointFs[0].y =mHeight;

        PointFs[1] =new PointF(); // p1

        PointFs[1].x =new Random().nextInt(mWidth);

        PointFs[1].y =new Random().nextInt(mHeight /2) +mHeight /2 +params.height;

        PointFs[2] =new PointF(); // p2

        PointFs[2].x =new Random().nextInt(mWidth);

        PointFs[2].y =new Random().nextInt(mHeight /2);

        PointFs[3] =new PointF(); // p3

        PointFs[3].x =new Random().nextInt(mWidth);

        PointFs[3].y =0;

        return PointFs;

    }

}

?xml version="1.0" encoding="utf-8"?

com.example.technology.lovedemo.Love xmlns:android=""

    android:id="@+id/lovelayout"

    android:layout_width="match_parent"

    android:background="#d2aab7"

    android:layout_height="match_parent"

        android:id="@+id/iamge"

        android:layout_width="300dp"

        android:layout_height="300dp"

        android:layout_centerInParent="true"

        android:background="@drawable/ceshi" /

public class MainActivity extends AppCompatActivity {

private GestureDetector myGestureDetector;

    private Love ll_love;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ll_love = (Love) findViewById(R.id.lovelayout);

        ImageView iamge = findViewById(R.id.iamge);

        //实例化GestureDetector

        myGestureDetector =new GestureDetector(this, new myOnGestureListener());

        //增加监听事件

        iamge.setOnTouchListener(new View.OnTouchListener() {

@Override//可以捕获触摸屏幕发生的Event事件

            public boolean onTouch(View v, MotionEvent event) {

//使用GestureDetector转发MotionEvent对象给OnGestureListener

                myGestureDetector.onTouchEvent(event);

                return true;

            }

});

    }

class myOnGestureListener extends GestureDetector.SimpleOnGestureListener {

@Override

        public boolean onDoubleTap(MotionEvent e) {

ll_love.addLoveView(e.getRawX(),e.getRawY());

            return super.onDoubleTap(e);

        }

}

}

海外抖音点赞源码(海外版点赞源码) 第1张

一套成功的仿抖音短视频APP源码在观看视频中需要开发哪些功能

短视频我们不陌生,其便捷的功能化极大的增加了我们的体验度,观看视频的核心功能就是,用户在此页面浏览视频,评论、点赞、关注、分享,具体细化有哪些方面呢,我们一起来学习一下一套成功的 仿抖音短视频APP源码 在观看视频中需要开发哪些功能。

1、关注跟推荐栏

点击关注则浏览之前关注主播发布的f作品,点击推荐则根据你看视频的喜好给你性荐视频2、自动循环播放

打开仿抖音短视频APP源码开发平台进入首页、自动播放推荐的视频

3、视频信息

显示视频标题,视频简介

4、底部标签栏

点击标签显示不同内容

5、搜索栏

点击跳转至搜索页面

6、作者头像栏

显示作者的头像

7、点赞

双击为视频点赞,下方显示点赞该视频的数量

8、评论

点击进入视频评论区,下方显示评论该视频的数量

9、转发

点击转发视频

10、关闭

推出视频评论区

11、评论时间

显示评论时间

12、给该评论点赞

点击则给该评论进行点赞,下方显示该评论的点赞数量

13、展开评论

点击则显示该楼层的评论区

14、评论者头像跟昵称

显示评论者的头像跟昵称

15、评论栏

发表评论

上述就是成功的仿抖音短视频APP源码需要开发的功能,在仿抖音短视频APP源码观看视频的核心功能未登陆用户只能在推荐页面浏览视频,已登录用户可以进行任何操作。

其页面逻辑是向下滑动浏览下一个视频,向上滑动浏览上次观看的视频,视频右边可以点赞.转发、评论,点击作者头像查看作者个人信息,点击底部标签栏里的标签显示不同的内容,点击关注则观看之前关注过作者发布的作品。

完全开源的仿抖音短视频APP源码,可直接搭建部署短视频平台,并且支持二次开发,可打造独立短视频平台,也可用于新媒体资讯、IM通讯、社区内容分享等场景。

在海外抖音点赞会延迟吗知乎

不会。海外抖音喜欢点赞都是实时的,没有延迟,基本上是随时点赞随时就能看到,除非是自己的网络不稳定,否则不会有任何延迟。抖音在国外的名字是“tiktok”,抖音国际版是抖音短视频面向海外的版本。

国外抖音点赞的k是什么意思

国外抖音点赞的k是千的意思。

报告里面点赞的K和M分别表示着千和百万的含义。因为这个tiktok是抖音的海外版本。

所采用的计数统计方法以及数学相关的量词,都是根据海外用户的需要进行调整的,而在西方的记录法里面一般把每三个事情只作为一个单位,千和百万就是其中的代表。

而在英语里面1000和100万的英语单词开头字母分别是K和M。

TikTok Live Studio:

2021年12月,TikTok 正在开发一款名为 TikTok Live Studio 的 Windows 桌面应用。

用户可以通过用他们的 TikTok 账号登录 TikTok Live Studio 进行直播,直播内容将直接呈现在 TikTok Live 上。在直播过程中,用户可以通过聊天功能跟观众交流、可以从你的电脑、手机或游戏机上传输内容。TikTok 已经证实,这个应用现只在少数西方市场提供,有几千名用户正在使用。

文章目录
    搜索