返回顶部
首页 > 资讯 > 精选 >如何在Android中实现短视频画心效果
  • 459
分享到

如何在Android中实现短视频画心效果

2023-06-15 05:06:01 459人浏览 独家记忆
摘要

如何在Android中实现短视频画心效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。主布局<?xml version="1.0"&nb

如何在Android中实现短视频画心效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

主布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="Http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity"><androidx.recyclerview.widget.RecyclerView    android:id="@+id/ree"    android:layout_width="match_parent"    android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>    <SurfaceView        android:id="@+id/surface"        android:layout_width="match_parent"        android:layout_height="match_parent"></SurfaceView></RelativeLayout>

适配器布局`

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer        android:id="@+id/detail"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>

Activity页面逻辑

package com.example.pagfany;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.PixelFORMat;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.RectF;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Display;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.Toast;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;public class MainActivity extends AppCompatActivity implements BaseLinearLayoutManager.OnListener, SurfaceHolder.Callback {    @BindView(R.id.ree)    RecyclerView ree;    @BindView(R.id.surface)    SurfaceView surface;    private BaseeAdap baseeAdap;    private SurfaceHolder surfaceHolder;    private Display display;    Handler handler=new Handler(){        @Override        public void handleMessage(@NonNull Message msg) {//清除画板上的内容            super.handleMessage(msg);           if (msg.what==1){               Canvas canvas = surfaceHolder.lockCanvas();               Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);               paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));               paint.setColor(Color.TRANSPARENT);               RectF rectF = new RectF(0,0,display.getWidth(),display.getHeight());               canvas.drawRect(rectF,paint);               surfaceHolder.unlockCanvasAndPost(canvas);           }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        BaseLinearLayoutManager baseLinearLayoutManager = new BaseLinearLayoutManager(this);        baseLinearLayoutManager.setOnListener(this);//接口回调        ree.setLayoutManager(baseLinearLayoutManager);        List<StringBean> beans = new ArrayList<>();        for (int i = 0; i < shuzu.videoUrls.length; i++) {            beans.add(new StringBean(shuzu.videoUrls[i]));        }        baseeAdap = new BaseeAdap(R.layout.basevideo, beans);        ree.setAdapter(baseeAdap);        display=getWindowManager().getDefaultDisplay();//通过管理器获取屏幕信息        surface.setZOrderOnTop(true);//置顶        surface.getHolder().setFormat(PixelFormat.TRANSPARENT);//画板透明社        surface.getHolder().addCallback(this);//接口回调    }    @Override    public void init() {    }    @Override    public void reselat() {        baseeAdap.getreselat();//调用适配器的方法    }    @Override    public void getplay(int position) {        baseeAdap.gepalay(position);//滑动播放!!有错误    }    @Override    protected void onDestroy() {        super.onDestroy();        baseeAdap.getAllreselat();//关闭程序清空缓存    }    private long time=0;    private float y;    private float x;    @Override    public void surfaceCreated(@NonNull SurfaceHolder holder) {        surfaceHolder=holder;        surface.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                switch (event.getAction()){//双击                    case MotionEvent.ACTION_DOWN://按下按钮                        if (time==0){                            time=System.currentTimeMillis();//第一次时间                        }else {                            if (System.currentTimeMillis()-time<250){//当前时间 减去time                                 y = event.getY();                                 x = event.getX();//点击的坐标                                huaxin();//调用花心的方法                                handler.sendEmptyMessageAtTime(1,500);                            }else {                                time=System.currentTimeMillis();                            }                        }                        break;                }                return false;            }        });    }    private void huaxin() {        Canvas canvas = surfaceHolder.lockCanvas();        Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));//当想设置图片重叠的相交状态时        paint.setColor(Color.TRANSPARENT);        RectF rectF = new RectF(0,0,display.getWidth(),display.getHeight());        canvas.drawRect(rectF,paint);//清空画板        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);        canvas.drawBitmap(bitmap,x,y,null);//注意不要用画笔 当前画笔是透明色        surfaceHolder.unlockCanvasAndPost(canvas);    }    @Override    public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {    }    @Override    public void surfaceDestroyed(@NonNull SurfaceHolder holder) {    }}

适配器

package com.example.pagfany;import android.util.Log;import androidx.annotation.Nullable;import com.chad.library.adapter.base.BaseQuickAdapter;import com.chad.library.adapter.base.BaseViewHolder;import com.shuyu.gsyvideoplayer.GSYVideoManager;import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;import java.util.List;public class BaseeAdap extends BaseQuickAdapter<StringBean, BaseViewHolder> {    private StandardGSYVideoPlayer standardGSYVideoPlayer;    public BaseeAdap(int layoutResId, @Nullable List<StringBean> data) {        super(layoutResId, data);    }    private int aa=-1;    @Override    protected void convert(BaseViewHolder helper, StringBean item) {      standardGSYVideoPlayer =helper.getView(R.id.detail);        standardGSYVideoPlayer.setUp(item.getA(),true,"美女");        standardGSYVideoPlayer.startPlayLogic();    }    public void getreselat() {        standardGSYVideoPlayer.release();    }    public void getAllreselat() {        GSYVideoManager.releaseAllVideos();    }    public void gepalay(int position) {        standardGSYVideoPlayer.setUp(shuzu.videoUrls[position],true,"美女");        standardGSYVideoPlayer.startPlayLogic();    }}

自定义线性布局

package com.example.pagfany;import android.content.Context;import android.util.Log;import android.view.View;import androidx.annotation.NonNull;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.PagerSnapHelper;import androidx.recyclerview.widget.RecyclerView;public class BaseLinearLayoutManager extends LinearLayoutManager implements RecyclerView.OnChildAttachStateChangeListener {    public BaseLinearLayoutManager(Context context) {        super(context);    }    public BaseLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {        super(context, orientation, reverseLayout);    }    private OnListener onListener;//接口    public void setOnListener(OnListener onListener) {        this.onListener = onListener;    }    interface OnListener{        void init();        void reselat();        void getplay(int position);    }    private PagerSnapHelper pagerSnapHelper;//    @Override    public void onAttachedToWindow(RecyclerView view) {        super.onAttachedToWindow(view);        pagerSnapHelper=new PagerSnapHelper();        pagerSnapHelper.attachToRecyclerView(view);//RecyclerView的滑动        view.addOnChildAttachStateChangeListener(this);//滑动状态监听    }    private static final String TAG = "BaseLinearLayoutManager";    @Override    public void onScrollStateChanged(int state) {        super.onScrollStateChanged(state);        switch (state){            case RecyclerView.SCROLL_STATE_IDLE:                View snapView = pagerSnapHelper.findSnapView(this);                int position = getPosition(snapView);                onListener.getplay(position);                Log.i(TAG, "onScrollStateChanged: "+position);                break;        }    }    @Override    public void onChildViewAttachedToWindow(@NonNull View view) {        Log.i(TAG, "onChildViewAttachedToWindow: "+132456);    }    @Override    public void onChildViewDetachedFromWindow(@NonNull View view) {          if (onListener!=null){              onListener.reselat();//滑动下一个页面 让上个视频没有声音 清除缓存          }    }}

Android是什么

Android是一种基于linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发

关于如何在Android中实现短视频画心效果问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 如何在Android中实现短视频画心效果

本文链接: https://lsjlt.com/news/278011.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在Android中实现短视频画心效果
    如何在Android中实现短视频画心效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。主布局<xml version="1.0"&nbs...
    99+
    2023-06-15
  • Android实现短视频画心效果
    本文实例为大家分享了Android实现短视频画心效果的具体代码,供大家参考,具体内容如下 布局 主布局 <?xml version="1.0" encoding="...
    99+
    2024-04-02
  • Android实现视频的画中画功能
    简介: Android 8.0(API 级别 26)允许以画中画 (PIP) 模式启动 Activity。画中画是一种特殊类型的多窗口模式,最常用于视频播放。使用该模式,用户可以通过...
    99+
    2024-04-02
  • python实现多个视频文件合成画中画效果
    本文实例为大家分享了多个视频文件合成画中画效果的python代码,供大家参考,具体内容如下 Step 1 从视频中分离出音频(MP4->mp3) def separateM...
    99+
    2024-04-02
  • 如何用transition实现短视频APP的点赞动画
    这篇文章主要讲解了“如何用transition实现短视频APP的点赞动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用transition实现短视频A...
    99+
    2024-04-02
  • Python如何实现短视频爬虫
    这篇文章主要介绍了Python如何实现短视频爬虫,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。网站地址在代码里面,大家用心一下就能看到了。使用的软件python 3...
    99+
    2023-06-25
  • 如何在Android中利用ConstraintLayout实现一个动画效果
    这篇文章将为大家详细讲解有关如何在Android中利用ConstraintLayout实现一个动画效果,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。xml布局:<!-- activit...
    99+
    2023-05-31
    android constraintlayout roi
  • 如何在Android应用中实现一个Gallery画廊效果
    这期内容当中小编将会给大家带来有关如何在Android应用中实现一个Gallery画廊效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。画廊 使用Gallery表示,按水平方向显示内容,并且可以用手指直接...
    99+
    2023-05-31
    android gallery roi
  • Android 8.0 中如何实现视频通话的画中画模式的示例
    Android 8.0 当中允许 Activiy 以画中画模式展现。这是一种多窗口模式的改进加强,在视频类应用中用处非常大,有了这种模式,就可以在视频通话或者观看直播的过程当中打开另外的应用而不用退出当前视频。更详细的就不再累述了,大家去阅...
    99+
    2023-05-30
    android 画中画 roi
  • Android Flutter如何实现3D动画效果
    这篇文章主要讲解了“Android Flutter如何实现3D动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android Flutter如何实现3D动画效果”吧...
    99+
    2023-06-29
  • Android怎么实现加载视差动画效果
    本篇内容主要讲解“Android怎么实现加载视差动画效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么实现加载视差动画效果”吧!基础知识继 Android实现旋转动画...
    99+
    2023-06-20
  • Android仿腾讯视频实现悬浮窗效果
    前言 相信大家对Android悬浮窗应该是很熟悉了,比如说腾讯视频、爱奇艺等APP都有悬浮窗功能。在你打游戏的同时还可以看视频,充分利用屏幕空间。还有微信,360手机卫士等APP也有...
    99+
    2024-04-02
  • 如何实现Android短视频跨页面的流畅续播
    要实现Android短视频跨页面的流畅续播,可以考虑以下几个步骤:1. 使用视频播放器库:在Android中,可以使用一些开源的视频...
    99+
    2023-08-29
    Android
  • 实例解析如何在Android应用中实现弹幕动画效果
    在B站或者其他视频网站看视频时,常常会打开弹幕效果,边看节目边看大家的吐槽。弹幕看起来很有意思,今天我们就来实现一个简单的弹幕效果。  从直观上,弹幕效果就是在一...
    99+
    2022-06-06
    动画 Android
  • Android编程实现仿心跳动画效果的方法
    本文实例讲述了Android编程实现仿心跳动画效果的方法。分享给大家供大家参考,具体如下: // 按钮模拟心脏跳动 private void playHeartbeatAni...
    99+
    2022-06-06
    方法 动画 Android
  • 如何在Android应用中利用Dialog实现一个动画效果
    今天就跟大家聊聊有关如何在Android应用中利用Dialog实现一个动画效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 创建两个动画文件window_in.xml:<&a...
    99+
    2023-05-31
    android dialog roi
  • html5+CSS3如何实现优酷视频截图效果
    这篇文章主要介绍html5+CSS3如何实现优酷视频截图效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一般的视频网站对于用户上传的视频,在用户上传完成后,可以对播放的视频进行截图...
    99+
    2024-04-02
  • 如何基于Flutter实现爱心三连动画效果
    这篇文章主要为大家展示了“如何基于Flutter实现爱心三连动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何基于Flutter实现爱心三连动画效果”这篇文章吧。前言我们开始 Flutt...
    99+
    2023-06-29
  • 在Html中如何实现音、视频
    这篇文章将为大家详细讲解有关在Html中如何实现音、视频,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在Html中也是可以播放音频和视频的,不过这项功能添加在了Htm...
    99+
    2024-04-02
  • Android如何实现播放视频
    这篇文章将为大家详细讲解有关Android如何实现播放视频,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、通过intent的方式,调用系统自带的播放器  Uri uri&n...
    99+
    2023-05-31
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作