android 仿QQ动态背景、视频背景的示例代码

本文介绍了android 仿QQ动态背景、视频背景的示例代码,分享给大家,具体如下:

效果如下:

如上图类似效果图:

1, 自定义视频类 继承VideoView

 public class CustomVideoView extends VideoView {

  public CustomVideoView(Context context) {
    super(context);
  }

  public CustomVideoView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    //我们重新计算高度
    int width = getDefaultSize(0, widthMeasureSpec);
    int height = getDefaultSize(0, heightMeasureSpec);
    setMeasuredDimension(width, height);
  }

  @Override
  public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
    super.setOnPreparedListener(l);
  }

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    return super.onKeyDown(keyCode, event);
  }
}

MainActivity 中:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private CustomVideoView videoview;
    private Button  btn_enter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      // requestWindowFeature(Window.FEATURE_NO_TITLE);
      setContentView(R.layout.activity_main);
      initView();
    }

    /**
     * 初始化
     */
    private void initView() {
      btn_enter = (Button) findViewById(R.id.btn_enter);
      btn_enter.setOnClickListener(this);

      videoview = (CustomVideoView) findViewById(R.id.videoview);
      videoview.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.shipin2));

      //播放
      videoview.start();
      //循环播放
      videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
          videoview.start();
          mediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
            @Override
            public boolean onInfo(MediaPlayer mp, int what, int extra) {
              return false;
            }
          });
        }
      });

    }

    @Override
    public void onClick(View view) {
      switch (view.getId()){
        case R.id.btn_enter:
          Toast.makeText(this,"登录成功了",Toast.LENGTH_SHORT).show();
          break;
      }
    }

    //返回重启加载
    @Override
    protected void onRestart() {
      super.onRestart();
      initView();
    }

    //防止锁屏或者切出的时候,音乐在播放
    @Override
    protected void onStop() {
      super.onStop();
      videoview.stopPlayback();
    }
  }

读取视频的问题: 把视频放到和res/raw文件夹里面了

布局文件中:

  <?xml version="1.0" encoding="utf-8"?>
  <FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

     <!--CustomVideoView 自定义视频类的位置-->
    <application1.applicationlong.CustomVideoView
      android:id="@+id/videoview"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="top"
      android:orientation="vertical">

      <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="38dp"
        android:layout_marginRight="38dp"
        android:layout_marginTop="70dp"
        android:orientation="vertical">

        <EditText
          android:id="@+id/et_phone"
          android:layout_width="match_parent"
          android:layout_height="40dp"
          android:layout_gravity="center_vertical"
          android:background="@null"
          android:digits="0123456789"
          android:gravity="center_vertical"
          android:hint="请输入手机号"
          android:inputType="number"
          android:maxLength="11"
          android:maxLines="1"
          android:paddingLeft="5dp"
          android:textColor="@android:color/white"
          android:textColorHint="@android:color/white"
          android:textSize="18sp"/>

        <View
          android:layout_width="match_parent"
          android:layout_height="1dp"
          android:layout_alignParentBottom="true"
          android:background="@color/black"/>

        <EditText
          android:id="@+id/et_pwd"
          android:layout_width="match_parent"
          android:layout_height="40dp"
          android:layout_marginTop="20dp"
          android:background="@null"
          android:gravity="center_vertical"
          android:hint="请输入密码"
          android:inputType="textPassword"
          android:maxLength="11"
          android:maxLines="1"
          android:paddingLeft="5dp"
          android:textColor="@android:color/white"
          android:textColorHint="@android:color/white"
          android:textSize="18sp"/>

        <View
          android:layout_width="match_parent"
          android:layout_height="1dp"
          android:layout_alignParentBottom="true"
          android:background="@color/black"/>

      </LinearLayout>

      <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="23dp"
        android:layout_marginRight="23dp"
        android:orientation="horizontal">

        <TextView
          android:id="@+id/tv_register"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:padding="15dp"
          android:text="快速注册"
          android:textColor="@color/green"/>

        <TextView
          android:id="@+id/tv_find_pwd"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentEnd="true"
          android:layout_alignParentRight="true"
          android:layout_alignParentTop="true"
          android:gravity="right"
          android:padding="15dp"
          android:text="忘记密码?"
          android:textColor="@color/green"/>

      </RelativeLayout>

      <Button
        android:id="@+id/btn_enter"
        style="?android:attr/borderlessButtonStyle"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:layout_marginTop="20dp"
        android:background="@color/darkseagreen"
        android:text="登录"
        android:textColor="@color/white"
        android:textSize="18dp"/>

    </LinearLayout>

    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="bottom"
      android:paddingBottom="30dp"
      android:orientation="vertical">
      <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="90dp"
        android:gravity="center"
        android:text="使用第三方登录"
        android:textColor="@color/white"
        android:textSize="16dp"
        android:visibility="visible"/>

      <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <ImageView
          android:id="@+id/iv_wechat"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="10dp"
          android:padding="10dp"
          android:src="@drawable/qq"/>

        <ImageView
          android:id="@+id/iv_qq"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginLeft="20dp"
          android:layout_marginTop="10dp"
          android:padding="10dp"
          android:src="@drawable/weixin"/>
      </LinearLayout>
    </LinearLayout>
  </FrameLayout>

注意:

视频资源要添加res文件夹下创建raw文件夹

需要在onRestart()方法里重新加载视频,防止退出返回时视频黑屏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • android换肤功能 如何动态获取控件中背景图片的资源id?
  • Android实现动态切换组件背景的方法
(0)

相关推荐

  • Android实现动态切换组件背景的方法

    本文所述的程序实现的功能为在软件中动态的选择组件背景,系统皮肤,自定义吐司背景等. 为实现这一要求,就需要用到安卓中的SharedPrefence的功能,首先在设置里面写一个控件,设置一个点击监听器,点击的时候显示一个Alert选择弹窗,让你进行选择,对这个弹窗再设置一个点击监听器(onItemListener),点击到具体某个的时候,把对应的点击id保存到sahredprefence里面去,这样,其他地方就可以从这里取得设置里选择的值,进行动态个性化处理. 具体代码如下: 1.设置选择的操作:

  • android换肤功能 如何动态获取控件中背景图片的资源id?

    这个是在在做一个换肤功能时遇到的问题. 对于换肤,网上都有示例,可以从别的皮肤安装包中读取所要的资源,前提是你必须先持有这个资源的引用名称,像R.drawable.background(喂,这不是废话嘛).这个换肤的方案原理就是,自身应用的资源名称是R.drawable.background,那皮肤包中应该也是这个名称,然后通过这个名称获取该资源在皮肤包中的具体id,代码: //先获取本地资源引用名称,type name是R.drawable.background中的"drawable"

  • android 仿QQ动态背景、视频背景的示例代码

    本文介绍了android 仿QQ动态背景.视频背景的示例代码,分享给大家,具体如下: 效果如下: 如上图类似效果图: 1, 自定义视频类 继承VideoView public class CustomVideoView extends VideoView { public CustomVideoView(Context context) { super(context); } public CustomVideoView(Context context, AttributeSet attrs)

  • Android仿QQ空间顶部条背景变化效果

    本文给大家分享仿QQ空间页面顶部条随界面滑动背景透明度变化的效果,这个效果在其他应用程序中也很常见,技能+1. 一.上代码,具体实现 笔者之前的文章第二部分总是二话不说,直接上代码,很干脆,其实更好的方式是引导读者思考:这个效果如何实现.前期做好效果的功能分析,才能读者更好的理解. QQ空间的这个页面其实并不复杂,我们看看QQ空间的演示界面: 可以看见,整个页面其实只有两个根元素,一个是ListView,一个是标题栏,前者可以上下滑动,给用户呈现内容:后者固定位置不动,类似于一个导航栏,左边一个

  • Android自定义view仿QQ的Tab按钮动画效果(示例代码)

    话不多说 先上效果图 实现其实很简单,先用两张图 一张是背景的图,一张是笑脸的图片,笑脸的图片是白色,可能看不出来.实现思路:主要是再触摸view的时候同时移动这两个图片,但是移动的距离不一样,造成的错位感,代码很简单: import android.content.Context import android.graphics.* import android.util.AttributeSet import android.view.MotionEvent import android.vi

  • Android仿网易新闻图片详情下滑隐藏效果示例代码

    前言 本文主要给大家分享了Android仿网易新闻图片详情下滑隐藏效果的相关内容,分享出来供需要的朋友参考学习,下面话不多说了,来一起看看详细的介绍吧 效果图: 实例代码 public class InfoTextView extends AutoRelativeLayout { private Context context; private int lastY; private int offY; private int MIN_HEIGHT = 600; public InfoTextVi

  • Android仿简书搜索框效果的示例代码

    前言 之前用简书的时候一直是在web端,后来下载了客户端,看到了搜索的那个动画,就尝试的去写了,没写之前感觉挺容易的,写了之后,就感觉里面还是有些要注意的东西的.话不多说,直接上图. Activity 布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

  • Android仿淘宝搜索联想功能的示例代码

    现在不少应用都提供了搜索功能,有些还提供了搜索联想.对于一个搜索联想功能,最基本的实现流程为:客户端通过监听输入框内容的变化,当输入框发生变化之后就会回调afterTextChanged方法,客户端利用当前输入框内的文字向服务器发起请求,服务器返回与该搜索文字关联的结果给客户端进行展示.服务器那边,一般要做内存缓存池,就是把有可能的结果都放在内存中. 效果图 APP这边也有几个重要的问题需要我们思考 当搜索词为空时,不应该发起网络请求. 在用户连续输入的情况下,可能会发起某些不必要的请求.例如用

  • Android仿QQ讨论组头像效果

    本文实例为大家分享了Android仿QQ讨论组头像展示的具体代码,供大家参考,具体内容如下 一.效果图 二.实现 基本实现过程: 1.将原图片读取为bitmap 2.在Canvas画布上计算出图片位置,并绘制新的图片. (ps:计算位置对我来说是难点,花了好长时间): 三.源码 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:/

  • Android仿QQ空间动态界面分享功能

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 和 模糊搜索,反复快速滑动仍然非常流畅. 缓存机制使得数据可在启动界面后瞬间加载完成. 动态详情界面MomentActivity支持 (取消)点赞.(删除)评论.点击姓名跳到个人详情 等. 只有1张图片时图片放大显示,超过1张则按九宫格显示. 用到的CommentContainerView和Mom

  • Android仿QQ空间底部菜单示例代码

    之前曾经在网上看到Android仿QQ空间底部菜单的Demo,发现这个Demo有很多Bug,布局用了很多神秘数字.于是研究了一下QQ空间底部菜单的实现,自己写了一个,供大家参考.效果如下图所示:   1.实现原理很简单,底部菜单是一个水平分布的LinearLayout,里面又是五个LinearLayout,它们的layout_weight都为1,意味着底部菜单的子控件将屏幕宽度平均分为5部分.五个LinearLayout除了中间那个,其余都在里面放置ImageView和TextView(中间先空

  • Android 仿QQ头像自定义截取功能

    看了Android版QQ的自定义头像功能,决定自己实现,随便熟悉下android绘制和图片处理这一块的知识. 先看看效果: 思路分析: 这个效果可以用两个View来完成,上层View是一个遮盖物,绘制半透明的颜色,中间挖了一个圆:下层的View用来显示图片,具备移动和缩放的功能,并且能截取某区域内的图片. 涉及到的知识点: 1.Matrix,图片的移动和缩放 2.Paint的setXfermode方法 3.图片放大移动后,截取一部分 编码实现: 自定义三个View: 1.下层View:ClipP

随机推荐