精华内容
下载资源
问答
  • Android 仿手机QQ动态背景登录界面,视频背景gif背景源码
  • 根据本讲学习内容,学会运用VideoView实现带动态背景登录界面。 (1) 提交的作业包中含有应用程序运行效果截图。
  • 背景动态城市的mp4适合于手机端做登录界面背景
  • 动态Jquery登录界面源码,移动鼠标背景中的动态效果会随之发生变化,很不错的资源,很适合用于项目开发
  • @import url(http://fonts.useso.com/css?family=Source+Sans+Pro:200,300); * { box-sizing: border-box; margin: 0; padding: 0; font-weight: 300; ... font-family: 'Source Sans...
    @import url(http://fonts.useso.com/css?family=Source+Sans+Pro:200,300);
    * {
      box-sizing: border-box;
      margin: 0;
      padding: 0;
      font-weight: 300;
    }
    body {
      font-family: 'Source Sans Pro', sans-serif;
      color: white;
      font-weight: 300;
    }
    body ::-webkit-input-placeholder {
      /* WebKit browsers */
      font-family: 'Source Sans Pro', sans-serif;
      color: white;
      font-weight: 300;
    }
    body :-moz-placeholder {
      /* Mozilla Firefox 4 to 18 */
      font-family: 'Source Sans Pro', sans-serif;
      color: white;
      opacity: 1;
      font-weight: 300;
    }
    body ::-moz-placeholder {
      /* Mozilla Firefox 19+ */
      font-family: 'Source Sans Pro', sans-serif;
      color: white;
      opacity: 1;
      font-weight: 300;
    }
    body :-ms-input-placeholder {
      /* Internet Explorer 10+ */
      font-family: 'Source Sans Pro', sans-serif;
      color: white;
      font-weight: 300;
    }
    .wrapper {
      background: #50a3a2;
      background: -webkit-linear-gradient(top left, #50a3a2 0%, #53e3a6 100%);
      background: linear-gradient(to bottom right, #50a3a2 0%, #53e3a6 100%);
      opacity: 0.8;
      position: absolute;
      left: 0;
      width: 100%;
      height: 400px;
      overflow: hidden;
    
    }
    
    .wrapper.form-success .container h1 {
      -webkit-transform: translateY(85px);
          -ms-transform: translateY(85px);
              transform: translateY(85px);
    }
    .container {
      max-width: 600px;
      margin: 0 auto;
      padding: 80px 0;
      height: 400px;
      text-align: center;
    }
    .container h1 {
      font-size: 40px;
      -webkit-transition-duration: 1s;
              transition-duration: 1s;
      -webkit-transition-timing-function: ease-in-put;
              transition-timing-function: ease-in-put;
      font-weight: 200;
    }
    form {
      padding: 20px 0;
      position: relative;
      z-index: 2;
    }
    form input {
      -webkit-appearance: none;
         -moz-appearance: none;
              appearance: none;
      outline: 0;
      border: 1px solid rgba(255, 255, 255, 0.4);
      background-color: rgba(255, 255, 255, 0.2);
      width: 250px;
      border-radius: 3px;
      padding: 10px 15px;
      margin: 0 auto 10px auto;
      display: block;
      text-align: center;
      font-size: 18px;
      color: white;
      -webkit-transition-duration: 0.25s;
              transition-duration: 0.25s;
      font-weight: 300;
    }
    form input:hover {
      background-color: rgba(255, 255, 255, 0.4);
    }
    form input:focus {
      background-color: white;
      width: 300px;
      color: #53e3a6;
    }
    form button {
      -webkit-appearance: none;
         -moz-appearance: none;
              appearance: none;
      outline: 0;
      background-color: white;
      border: 0;
      padding: 10px 15px;
      color: #53e3a6;
      border-radius: 3px;
      width: 250px;
      cursor: pointer;
      font-size: 18px;
      -webkit-transition-duration: 0.25s;
              transition-duration: 0.25s;
    }
    form button:hover {
      background-color: #f5f7f9;
    }
    .bg-bubbles {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      z-index: 1;
    }
    .bg-bubbles li {
      position: absolute;
      list-style: none;
      display: block;
      width: 40px;
      height: 40px;
      background-color: rgba(255, 255, 255, 0.15);
      bottom: -160px;
      -webkit-animation: square 25s infinite;
      animation: square 25s infinite;
      -webkit-transition-timing-function: linear;
      transition-timing-function: linear;
    }
    .bg-bubbles li:nth-child(1) {
      left: 10%;
    }
    .bg-bubbles li:nth-child(2) {
      left: 20%;
      width: 80px;
      height: 80px;
      -webkit-animation-delay: 2s;
              animation-delay: 2s;
      -webkit-animation-duration: 17s;
              animation-duration: 17s;
    }
    .bg-bubbles li:nth-child(3) {
      left: 25%;
      -webkit-animation-delay: 4s;
              animation-delay: 4s;
    }
    .bg-bubbles li:nth-child(4) {
      left: 40%;
      width: 60px;
      height: 60px;
      -webkit-animation-duration: 22s;
              animation-duration: 22s;
      background-color: rgba(255, 255, 255, 0.25);
    }
    .bg-bubbles li:nth-child(5) {
      left: 70%;
    }
    .bg-bubbles li:nth-child(6) {
      left: 80%;
      width: 120px;
      height: 120px;
      -webkit-animation-delay: 3s;
              animation-delay: 3s;
      background-color: rgba(255, 255, 255, 0.2);
    }
    .bg-bubbles li:nth-child(7) {
      left: 32%;
      width: 160px;
      height: 160px;
      -webkit-animation-delay: 7s;
              animation-delay: 7s;
    }
    .bg-bubbles li:nth-child(8) {
      left: 55%;
      width: 20px;
      height: 20px;
      -webkit-animation-delay: 15s;
              animation-delay: 15s;
      -webkit-animation-duration: 40s;
              animation-duration: 40s;
    }
    .bg-bubbles li:nth-child(9) {
      left: 25%;
      width: 10px;
      height: 10px;
      -webkit-animation-delay: 2s;
              animation-delay: 2s;
      -webkit-animation-duration: 40s;
              animation-duration: 40s;
      background-color: rgba(255, 255, 255, 0.3);
    }
    .bg-bubbles li:nth-child(10) {
      left: 90%;
      width: 160px;
      height: 160px;
      -webkit-animation-delay: 11s;
              animation-delay: 11s;
    }
    @-webkit-keyframes square {
      0% {
        -webkit-transform: translateY(0);
                transform: translateY(0);
      }
      100% {
        -webkit-transform: translateY(-700px) rotate(600deg);
                transform: translateY(-700px) rotate(600deg);
      }
    }
    @keyframes square {
      0% {
        -webkit-transform: translateY(0);
                transform: translateY(0);
      }
      100% {
        -webkit-transform: translateY(-700px) rotate(600deg);
                transform: translateY(-700px) rotate(600deg);
      }
    }
    

      

    $('#login-button').click(function (event) {
    	event.preventDefault();
    	$('form').fadeOut(500);
    	$('.wrapper').addClass('form-success');
    });
    

      

    <script src="http://www.datouwang.com/uploads/demo/jiaoben/201507/jiaoben544/js/jquery-2.1.1.min.js" type="text/javascript"></script>
    

      

    转载于:https://www.cnblogs.com/dadatu/p/4650842.html

    展开全文
  • qq7.0登录界面动态背景实现 qq7.0登录界面动态视频背景实现 android动态视频背景 android动态背景分析qq7.0:视频在打开登录界面就开始播放 了,而且期间无黑屏 而且是循环播放的画质问题这里就不说了,这个看视频源...

    qq7.0登录界面动态背景实现 qq7.0登录界面动态视频背景实现 android动态视频背景 android动态背景

    分析qq7.0:

    视频在打开登录界面就开始播放 了,而且期间无黑屏
    而且是循环播放的

    画质问题这里就不说了,这个看视频源了。

    可以让不规则的宽高各种宽高不定的视频比例 以及视频大小都能 适应任意安卓手机的宽高 包括平板,且不留任何缝隙

    播放器控件选取:解决的是手机适配的问题,另外是播放器控件,这里选择系统播放器比较好. 因为有些播放器不支持读取asset文件夹的Uri比如七牛的

    视频加载速度比较慢第一帧用图片代替且需要耦合视频的第一帧

    图片的第一帧截取我用的是一个比较专业的adobe premiere的开发工具 这个你们也可以让ps等后期的去做,这种事情对我来说的话还是小kiss,

    技术点:
    如何读取资源文件视频
    如何测量
    如何根据视频大小计算应该缩放的比例大小 解决任意尺寸视频手机不留黑边
    如何让图片的封面缩放大小和视频的缩放大小吻合
    如何调用onStart短暂黑屏问题

    架构搭建

    资源的读取

    
       String VIDEO_PATH = "android.resource://" + BuildConfig.APPLICATION_ID + "/" + R.raw.login;
    videoView.setVideoURI(Uri.parse(Constants.VIDEO_PATH));

    创建一个自定义视频类 自定义图片类 图片在视频的上面因为视频不是马上播放 加载有一定时间这里也会存在一个黑屏

    关于读取视频的问题,之前尝试过读取assests里面的视频失败了,在stackoverflow照的方案也不行,最后还是把视频放到和res/raw文件夹里面了,

    具体实现之视频控件

    1. 拿到视频的宽高度才能进行测量重新布局

    在继承的VideoView里添加setOnPreparedListener方法获取视频宽高度设置给成员变量就可以拿到了

     super.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(final MediaPlayer mp) {
    
    
          SystemVideoView.this.videoWidth = mp.getVideoWidth();
          SystemVideoView.this.videoHeight = mp.getVideoHeight();
    
    }
    }
    

    2. 继承VideoView重写onMeasure测量方法

    需要一个完美的算法来解决宽高都铺满屏幕问题

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
            MeasureUtil.Size measure = MeasureUtil.measure(displayAspectRatio, widthMeasureSpec, heightMeasureSpec, videoWidth, videoHeight);
    
            setMeasuredDimension(measure.width, measure.height);
        }

    这里的算法比较麻烦,不懂的同学搬用模版代码
    测量工具类MeasureUtil.measure方法抽出来
    的大致代码是

        public static MeasureUtil.Size measure(int displayAspectRatio, int widthMeasureSpec, int heightMeasureSpec, int videoWidth, int videoHeight) {
    
    
     if (widthMode == View.MeasureSpec.EXACTLY && heightMode == View.MeasureSpec.EXACTLY) {  
    
      if (percentVideo > percentView) {
                                width = widthSize;
                                height = (int) ((float) widthSize / percentVideo);
                            } else {
                                height = heightSize;
                                width = (int) ((float) heightSize * percentVideo);
                            }
    
        }else if (widthMode == View.MeasureSpec.EXACTLY) {
                    width = widthSize;
                    height = widthSize * videoHeight / videoWidth;
                    if (heightMode == View.MeasureSpec.AT_MOST && height > heightSize) {
                        height = heightSize;
                    }
                } else if (heightMode == View.MeasureSpec.EXACTLY) {
                    height = heightSize;
                    width = heightSize * videoWidth / videoHeight;
                    if (widthMode == View.MeasureSpec.AT_MOST && width > widthSize) {
                        width = widthSize;
                    }
                } else {
                    width = videoWidth;
                    height = videoHeight;
                    if (heightMode == View.MeasureSpec.AT_MOST && videoHeight > heightSize) {
                        height = heightSize;
                        width = heightSize * videoWidth / videoHeight;
                    }
    
                    if (widthMode == View.MeasureSpec.AT_MOST && width > widthSize) {
                        width = widthSize;
                        height = widthSize * videoHeight / videoWidth;
                    }
                }
    
    }
    
    
    public static class Size {
            public final int width;
            public final int height;
    
            public Size(int width, int height) {
                this.width = width;
                this.height = height;
            }
        }

    3. 黑屏问题解决探讨

    只要调用start就会有一定概率的黑屏毫秒
    先不管测量铺满问题,我们发现会存在一个坑,就是视频黑屏问题,进入这个界面肯定要让它不黑屏的.
    1.尝试过在onPrepared里面再在让VideoView显示隐藏结果没卵用
    1.直接隐藏控件在方案1的基础上延长几秒,start过程中依然隐藏(不同手机需要的延长时间不同,)但是如果0秒到1秒的过程中如果没有画面动还好,如果动了,延长超过1秒后在显示此控件那么视频就需要留长 不然首帧和此时videoview显示的时间不一致,后面发现这种死办法又没法解决循环播放问题

    最后的解决方法通过百度找到 是根据info的视频第一帧来判断:

      mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                        @Override
                        public boolean onInfo(MediaPlayer mp, int what, int extra) {
                            if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
                                if (onCorveHideListener != null) {
                                    onCorveHideListener.requestHide();
                                }
                            }
                            if (onInfoListener != null) {
                                onInfoListener.onInfo(mp, what, extra);
                            }
                            return false;
                        }
                    });

    图片的解决方案和视频一样,你这都需要代码得话打赏一个吧,哈哈,

    隐藏的方法在外面了。叫 setOnCorveHideListener ,实际上进入界面就应该马上显示画面的隐藏视频的话是一个白屏,所以这里需要

    最后界面activity或者fragment代码

        String VIDEO_PATH = "android.resource://" + BuildConfig.APPLICATION_ID + "/" + R.raw.login;
    
        loginActivityBinding.videoView.setDisplayAspectRatio(MeasureUtil.ASPECT_RATIO_PAVED_PARENT);
            loginActivityBinding.videoView.setOnCorveHideListener(new SystemVideoView.OnCorveHideListener() {
                @Override
                public void requestHide() {
                    loginActivityBinding.corver.setVisibility(View.GONE);
                }
            });
            loginActivityBinding.videoView.setVideoURI(Uri.parse(Constants.VIDEO_PATH));
            loginActivityBinding.videoView.start();
            loginActivityBinding.videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    loginActivityBinding.videoView.seekTo(0);
                    loginActivityBinding.videoView.start();
                }
            });
    
    
    
    
     @Override
        public void onPause() {
            super.onPause();
            loginActivityBinding.videoView.pause();
        }
    
        @Override
        public void onResume() {
            super.onResume();
            loginActivityBinding.videoView.start();
        }
    

    完整SystemVideoView代码

    public class SystemVideoView extends VideoView {
    
    
        private int videoWidth;//width
        private int videoHeight;
        private int displayAspectRatio;
    
        public SystemVideoView(Context context) {
            super(context);
        }
    
        public SystemVideoView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context);
        }
    
        public SystemVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init(context);
    
        }
    
        protected void init(Context context) {
            this.videoHeight = context.getResources().getDisplayMetrics().heightPixels;
            this.videoWidth = context.getResources().getDisplayMetrics().widthPixels;
    
            super.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(final MediaPlayer mp) {
    
                    SystemVideoView.this.videoWidth = mp.getVideoWidth();
                    SystemVideoView.this.videoHeight = mp.getVideoHeight();
                    mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                        @Override
                        public boolean onInfo(MediaPlayer mp, int what, int extra) {
                            if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
                                if (onCorveHideListener != null) {
                                    onCorveHideListener.requestHide();
                                }
                            }
                            if (onInfoListener != null) {
                                onInfoListener.onInfo(mp, what, extra);
                            }
                            return false;
                        }
                    });
                }
            });
        }
    
        MediaPlayer.OnPreparedListener onPreparedListener = null;
    
        public interface OnCorveHideListener {
            void requestHide();
        }
    
        @Override
        public void setOnInfoListener(MediaPlayer.OnInfoListener onInfoListener) {
            this.onInfoListener = onInfoListener;
        }
    
        MediaPlayer.OnInfoListener onInfoListener;
    
        public void setOnCorveHideListener(OnCorveHideListener onCorveHideListener) {
            this.onCorveHideListener = onCorveHideListener;
        }
    
        OnCorveHideListener onCorveHideListener;
    
        @Override
        public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
            this.onPreparedListener = l;
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
    
            MeasureUtil.Size measure = MeasureUtil.measure(displayAspectRatio, widthMeasureSpec, heightMeasureSpec, videoWidth, videoHeight);
            setMeasuredDimension(measure.width, measure.height);
    
    
    
    
    
        public void setDisplayAspectRatio(int var1) {
            displayAspectRatio = var1;
            this.requestLayout();
    
        }
    
    
        @Override
        public boolean isPlaying() {
            return false;
        }
    
        public int getDisplayAspectRatio() {
            return displayAspectRatio;
        }
    
        public void setCorver(int resource) {
            BitmapFactory.Options opts = new BitmapFactory.Options();
            opts.inJustDecodeBounds = true;
            BitmapFactory.decodeResource(getResources(), resource, opts);
    
        }
    

    我的博客
    我的简书

    展开全文
  • HTML5星空夜空背景登录界面模板,HTML5 canvas鼠标经过星星连线动态背景,账户和密码登录框透明效果。
  • HTML5星空夜空背景登录界面模板,HTML5 canvas鼠标经过星星连线动态背景,账户和密码登录框透明效果。
  • html5实现腾讯QQ登录界面背景动画特效(QQ背景动态)+js,可以有效的学习html标签,制作出所见即所得的东西。高大上的背景
  • 使用vue框架和h5制作的登录界面背景动态视频,内涵源码和一个视频素材,素材地址:http://www.coverr.co/
  • 本篇利用自定义VideoView,实现动态背景登录界面。 同时这也是中国大学慕课移动终端应用开发的网课作业23 说明 参考如下博客内容 EditText 自定义下划线颜色 在EditText中设置hint的大小和颜色 [Android基础] ...

    本篇利用自定义VideoView,实现动态背景的登录界面。

    同时这也是中国大学慕课移动终端应用开发的网课作业23

    说明

    参考如下博客内容

    效果图

    在这里插入图片描述

    代码部分

    1.MyVideoView.java
    public class MyVideoView extends VideoView {
        public MyVideoView(Context context) {
            super(context);
        }
    
        public MyVideoView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public MyVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        public MyVideoView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
            int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);
            setMeasuredDimension(widthSpecSize, heightSpecSize);
        }
        /**
         * https://blog.csdn.net/jdsjlzx/article/details/51777320
         *
         * https://blog.csdn.net/qq_24697659/article/details/49800419
         *
         * https://www.jianshu.com/p/2d3b221a2ee7
         *
         * https://blog.csdn.net/z19980115/article/details/75046606
         * */
    }
    
    
    2.MainActivity.java
    public class MainActivity extends AppCompatActivity {
        private MyVideoView mVideoView;
        private EditText mEditTextName,mEditTextPassword;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            getSupportActionBar().hide();
    
            mVideoView = findViewById(R.id.video_view);
            mEditTextName = findViewById(R.id.nameEditText);
            mEditTextPassword = findViewById(R.id.passwordEditText);
            mEditTextName.setHintTextColor(getResources().getColor(R.color.white));
            mEditTextPassword.setHintTextColor(getResources().getColor(R.color.white));
    
            Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.myvideo);
            mVideoView.setVideoURI(uri);
    
            mVideoView.start();
    //
    //        mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    //            @Override
    //            public void onCompletion(MediaPlayer mp) {
    //                mVideoView.resume();
    //            }
    //        });
        }
    }
    
    
    3.activity_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <com.example.course23.MyVideoView
            android:id="@+id/video_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    
        <RelativeLayout
            android:layout_marginTop="20dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <RelativeLayout
                android:id="@+id/viewCenter"
                android:paddingTop="20dp"
                android:layout_centerHorizontal="true"
                android:layout_width="280dp"
                android:layout_height="wrap_content">
    
                <EditText
                    android:id="@+id/nameEditText"
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:drawablePadding="10dp"
                    android:hint="请输入姓名"
                    android:layout_marginLeft="10dp"
    
                    android:textSize="16sp"></EditText>
    
    
                <EditText
                    android:id="@+id/passwordEditText"
                    android:layout_below="@+id/nameEditText"
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:drawablePadding="10dp"
                    android:hint="请输入密码"
                    android:textSize="16sp"
                    android:layout_marginLeft="10dp"></EditText>
    
    
            </RelativeLayout>
            <RelativeLayout
                android:id="@+id/login"
                android:layout_below="@id/viewCenter"
                android:layout_centerHorizontal="true"
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp"
                android:layout_marginTop="10dp">
                <TextView
                    android:text="快速注册"
                    android:textColor="#59EEF8"
                    android:paddingLeft="10dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
                <TextView
                    android:text="忘记密码"
                    android:paddingRight="10dp"
                    android:layout_alignParentRight="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#59EEF8"/>
            </RelativeLayout>
            <RelativeLayout
                android:layout_marginTop="10dp"
                android:layout_below="@id/login"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <TextView
                    android:text="登陆"
                    android:textSize="20dp"
                    android:layout_centerInParent="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#59EEF8"/>
            </RelativeLayout>
    
    
    
        </RelativeLayout>
    
    
    </RelativeLayout>
    
    4.修改colors.xml文件
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="colorPrimary">#72141414</color>
        <color name="colorPrimaryDark">#72141414</color>
        <color name="colorAccent">#D81B60</color>
        <color name="white">#FFF</color>
    </resources>
    
    5.修改styles.xml文件
    <resources>
    
        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
    
            <!-- AppCompatEditText默认状态状态设置底线颜色 -->
            <item name="colorControlNormal">#FFFFFF</item>
            <!-- AppCompatEditText选择的底线颜色 -->
            <item name="colorControlActivated">#c6174e</item>
        </style>
    
    </resources>
    

    视频资源

    在res目录下新建raw文件夹,将自己的视频保存为myvideo.mp4即可
    我的视频资源来自于火萤app

    总结

    如果有什么问题或改进方案,请私信联系我或者在评论区留言
    码字不易,若有帮助,给个关注和赞呗

    在这里插入图片描述

    展开全文
  • ios-动态背景登录.zip

    2019-07-11 19:43:39
    一款带有动态背景登录界面,很漂亮的登录效果, 下载地址:https://github.com/MyLoveLife/--- 喜欢的star下吧
  • 令人惊艳的登录界面,演示地址: (6秒自动切换)http://www.daimabiji.com/codedemo/1530 jquery动态背景切换全屏登录插件supersized.js下载地址
  • 动态飘雪花html的登录界面,点击有猫头鹰遮眼睛,精美,适合学习,拿来即用,背景是晚上,暗系风格。
  • 易语言模仿QQ登录界面动态特效,登录背景动态的,所用模块都在压缩包里。
  • 转载请说明原出处,谢谢~~ 在上一篇博客里,我修复了CActiveXUI控件的bug,... 去年的QQ2013的登陆界面就是动态界面,上篇博客我说道了,Duiengine已经有高人做好了仿QQ界面的代码,我这里只是把QQ2013的动态登陆...

    转载请说明原出处,谢谢~~

            在上一篇博客里,我修复了CActiveXUI控件的bug,从而可以使用flash动画来制作程序的背景,这篇博客说明一下应该怎么使用CActiveXUI控件创建透明无窗体的背景。

             去年的QQ2013的登陆界面就是动态界面,上篇博客我说道了,Duiengine已经有高人做好了仿QQ界面的代码,我这里只是把QQ2013的动态登陆界面制作出来。而QQ2014又换了全新的界面,不过熟悉UI制作的朋友知道,模仿

    QQ2014的登陆界面比QQ2013的还要简单。可以看到QQ2013的登录器的如果特点就是背景是动态,这个只要使用

    flash文件做背景就可以了。上一篇博客已经打好了基础,现在做起来就很简单了。

            我先分析一下QQ2013的登录器的布局:如图


            从界面元素来讲,QQ登陆起的控件没几个,而且也只是常规的布局,最外层一个纵向布局,里面包含上中下三

    个横向布局,整个窗体都是可以拖动的。

            其中的上下布局很简单,我就不额外赘述了,写好相对布局,贴图上去就行了。

              中间的布局的左侧是一个CControlUI控件,设置背景图就可以,在这个图片右下角有一个状态按钮,选择登陆

    后的状态,这里的话用绝对布局放一个小图片到头像图片的右下角,然后在点击他时弹出个菜单就可以了,菜单的部

    分我也在前面的博客里说明了。而右侧就是一个CEditUI,一个CComboUI,两个CLabel,两个COptionUI控件。麻烦

    一点的就是帐号输入框,如果要达到和QQ一样效果就最好自定义一个CCbomboUI控件。最近在忙着做仿酷狗程序,

    我就不再花时间在这里开发这个控件了,好在这个控件开发起来应该很容易,可以参照我前面的仿酷狗的文章。

            而在xml中布局时,应该怎么布局就可以让flash做背景了?我这里说明一下。比如这个QQ登陆,我前面说了最外

    层应该使用一个纵向布局,如果要加上flash背景,就应该再额外套用一个布局来做最外层,里面包含一个CActiveXUI

    控件播放flash,再用绝对布局把QQ登陆起的布局放到flash上面,下面是示例代码和效果图:

    <?xml version="1.0" encoding="UTF-8"?>
    <Window size="380,290" caption="0,0,0,290" roundcorner="3,3" >
    	<VerticalLayout bordersize="1" bordercolor="#FF000000" >
    		<ActiveX name="flashActiveX" clsid="{D27CDB6E-AE6D-11CF-96B8-444553540000}" mouse="false"/>
    		<VerticalLayout bkcolor="00FFFFFF" float="true" pos="0,0" width="380" height="290" >
    
    			<HorizontalLayout height="30" bkcolor="00FFFFFF" inset="2,2,0,0"><!-- 标题栏 -->
    				<Label text="  仿QQ登录器2013   BY:Redrain" textcolor="#FFFF0000" width="280" />
    				<Control />
    				<Button name="closebtn" width="42" maxheight="18" tooltip="点击这里直接退出游戏" normalimage="file='frame_btn_close_normal.bmp' mask='#FFFF00FF'" hotimage="file='frame_btn_close_hot.bmp' mask='#FFFF00FF'" pushedimage="file='frame_btn_close_down.bmp' mask='#FFFF00FF'"/>
    			</HorizontalLayout >
    
    			<HorizontalLayout bkcolor="00FFFFFF" > <!-- 主操作栏 -->
    	
    			</HorizontalLayout>
    
    			<HorizontalLayout bkcolor="00FFFFFF" height="50"> <!-- 登陆按钮 -->
    				<Button name="LoginBtn" text="登陆" padding="110,0,0,0" width="165" height="30" normalimage="file='login_btn_normal.png' conrer='10,10,10,10'" hotimage="file='login_btn_normal.png' conrer='10,10,10,10'" pushedimage="file='login_btn_normal.png' conrer='10,10,10,10'"/>			
    			</HorizontalLayout>
    		</VerticalLayout>
        </VerticalLayout>
    </Window>



          就说道这里吧,为了防止有人用他做界面型盗号木马,我就不把源码公布了,相信看到这里,我不公布代码大家

    也能做出和QQ 2013一样的登陆界面了。


           Redrain   2014.8.8 

     

    转载于:https://www.cnblogs.com/redrainblog/p/3902684.html

    展开全文
  • https://github.com/TonnyL/Spark 截图 用法 private lateinit var mSpark: Spark override fun onCreate(savedInstanceState: Bundle?) { // ... mSpark = Spark.Builder() ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 389
精华内容 155
关键字:

动态背景登录界面