Android 使用自定义RecyclerView控件实现Gallery效果

上篇文章给大家介绍了Android 自定义 HorizontalScrollView 打造多图片OOM 的横向滑动效果。其实制作横向滚动的不得不说另一个控件,就是Google官方最近新增加的RecyclerView,据说是ListView的升级版本,本篇文章,首先介绍RecyclerView的用法,然后经行一定的分析;最后自定义一下RecyclerView实现我们需要的相册效果。

1、RecyclerView的基本用法

首先主Activity的布局文件:

<RelativeLayout 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" >
 <android.support.v7.widget.RecyclerView
 android:id="@+id/id_recyclerview_horizontal"
 android:layout_width="match_parent"
 android:layout_height="120dp"
 android:layout_centerVertical="true"
 android:background="#FF0000"
 android:scrollbars="none" />
</RelativeLayout> 

Item的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="120dp"
 android:layout_height="120dp"
 android:background="@drawable/item_bg02" >
 <ImageView
 android:id="@+id/id_index_gallery_item_image"
 android:layout_width="80dp"
 android:layout_height="80dp"
 android:layout_alignParentTop="true"
 android:layout_centerHorizontal="true"
 android:layout_margin="5dp"
 android:scaleType="centerCrop" />
 <TextView
 android:id="@+id/id_index_gallery_item_text"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@id/id_index_gallery_item_image"
 android:layout_centerHorizontal="true"
 android:layout_marginBottom="5dp"
 android:layout_marginTop="5dp"
 android:textColor="#ff0000"
 android:text="some info"
 android:textSize="12dp" />
</RelativeLayout> 

数据适配器:

package com.example.zhy_horizontalscrollview03;
import java.util.List;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class GalleryAdapter extends
 RecyclerView.Adapter<GalleryAdapter.ViewHolder>
{
 private LayoutInflater mInflater;
 private List<Integer> mDatas;
 public GalleryAdapter(Context context, List<Integer> datats)
 {
 mInflater = LayoutInflater.from(context);
 mDatas = datats;
 }
 public static class ViewHolder extends RecyclerView.ViewHolder
 {
 public ViewHolder(View arg0)
 {
 super(arg0);
 }
 ImageView mImg;
 TextView mTxt;
 }
 @Override
 public int getItemCount()
 {
 return mDatas.size();
 }
 /**
 * 创建ViewHolder
 */
 @Override
 public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
 {
 View view = mInflater.inflate(R.layout.activity_index_gallery_item,
 viewGroup, false);
 ViewHolder viewHolder = new ViewHolder(view);
 viewHolder.mImg = (ImageView) view
 .findViewById(R.id.id_index_gallery_item_image);
 return viewHolder;
 }
 /**
 * 设置值
 */
 @Override
 public void onBindViewHolder(final ViewHolder viewHolder, final int i)
 {
 viewHolder.mImg.setImageResource(mDatas.get(i));
 }
} 

可以看到数据适配器与BaseAdapter比较发生了相当大的变化,主要有3个方法:

getItemCount 这个不用说,获取总的条目数
onCreateViewHolder 创建ViewHolder
onBindViewHolder 将数据绑定至ViewHolder

可见,RecyclerView对ViewHolder也进行了一定的封装,但是如果你仔细观察,你会发出一个疑问,ListView里面有个getView返回View为Item的布局,那么这个Item的样子在哪控制?

其实是这样的,我们创建的ViewHolder必须继承RecyclerView.ViewHolder,这个RecyclerView.ViewHolder的构造时必须传入一个View,这个View相当于我们ListView getView中的convertView (即:我们需要inflate的item布局需要传入)。

还有一点,ListView中convertView是复用的,在RecyclerView中,是把ViewHolder作为缓存的单位了,然后convertView作为ViewHolder的成员变量保持在ViewHolder中,也就是说,假设没有屏幕显示10个条目,则会创建10个ViewHolder缓存起来,每次复用的是ViewHolder,所以他把getView这个方法变为了onCreateViewHolder。有兴趣的自己打印下Log,测试下。

最后在Activity中使用:

package com.example.zhy_horizontalscrollview03;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Window;
public class MainActivity extends Activity
{
 private RecyclerView mRecyclerView;
 private GalleryAdapter mAdapter;
 private List<Integer> mDatas;
 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
 super.onCreate(savedInstanceState);
 requestWindowFeature(Window.FEATURE_NO_TITLE);
 setContentView(R.layout.activity_main);
 initDatas();
 //得到控件
 mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview_horizontal);
 //设置布局管理器
 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
 linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
 mRecyclerView.setLayoutManager(linearLayoutManager);
 //设置适配器
 mAdapter = new GalleryAdapter(this, mDatas);
 mRecyclerView.setAdapter(mAdapter);
 }
 private void initDatas()
 {
 mDatas = new ArrayList<Integer>(Arrays.asList(R.drawable.a,
 R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e,
 R.drawable.f, R.drawable.g, R.drawable.h, R.drawable.l));
 }
} 

使用起来也很方便,唯一的区别就是要设置LayoutManager,目前只有一个实现类,就是LinearLayoutManager,可以设置为水平或者垂直。

最后效果图:

效果很不错,这就是RecyclerView的基本用法了,但是你会发现一个坑爹的地方,竟然没有提供setOnItemClickListener这个回调,要不要这么坑爹。。。

2、为RecyclerView添加OnItemClickListener回调

虽然它没有提供,但是添加个OnItemClickListener对我们来说还不是小菜一碟~

我决定在Adapter中添加这个回调接口:

package com.example.zhy_horizontalscrollview03;
import java.util.List;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class GalleryAdapter extends
 RecyclerView.Adapter<GalleryAdapter.ViewHolder>
{
 /**
 * ItemClick的回调接口
 * @author zhy
 *
 */
 public interface OnItemClickLitener
 {
 void onItemClick(View view, int position);
 }
 private OnItemClickLitener mOnItemClickLitener;
 public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
 {
 this.mOnItemClickLitener = mOnItemClickLitener;
 }
 private LayoutInflater mInflater;
 private List<Integer> mDatas;
 public GalleryAdapter(Context context, List<Integer> datats)
 {
 mInflater = LayoutInflater.from(context);
 mDatas = datats;
 }
 public static class ViewHolder extends RecyclerView.ViewHolder
 {
 public ViewHolder(View arg0)
 {
 super(arg0);
 }
 ImageView mImg;
 TextView mTxt;
 }
 @Override
 public int getItemCount()
 {
 return mDatas.size();
 }
 @Override
 public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
 {
 View view = mInflater.inflate(R.layout.activity_index_gallery_item,
 viewGroup, false);
 ViewHolder viewHolder = new ViewHolder(view);
 viewHolder.mImg = (ImageView) view
 .findViewById(R.id.id_index_gallery_item_image);
 return viewHolder;
 }
 @Override
 public void onBindViewHolder(final ViewHolder viewHolder, final int i)
 {
 viewHolder.mImg.setImageResource(mDatas.get(i));
 //如果设置了回调,则设置点击事件
 if (mOnItemClickLitener != null)
 {
 viewHolder.itemView.setOnClickListener(new OnClickListener()
 {
 @Override
 public void onClick(View v)
 {
  mOnItemClickLitener.onItemClick(viewHolder.itemView, i);
 }
 });
 }
 }
} 

很简单,创建一个接口,提供一个设置入口,然后在onBindViewHolder中判断即可。

最后在主Activity中设置监听:

mAdapter = new GalleryAdapter(this, mDatas);
mAdapter.setOnItemClickLitener(new OnItemClickLitener()
{
 @Override
 public void onItemClick(View view, int position)
 {
 Toast.makeText(MainActivity.this, position+"", Toast.LENGTH_SHORT)
 .show();
 }
});
mRecyclerView.setAdapter(mAdapter); 

好了,这样就行了,看效果图:

效果还是不错的,接下来我想改成相册效果,即上面显示一张大图,下面的RecyclerView做为图片切换的指示器。

3、自定义RecyclerView实现滚动时内容联动

首先修改下布局:

布局文件:

<LinearLayout 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"
 android:orientation="vertical" >
 <FrameLayout
 android:layout_width="fill_parent"
 android:layout_height="0dp"
 android:layout_weight="1" >
 <ImageView
 android:id="@+id/id_content"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:layout_gravity="center"
 android:layout_margin="10dp"
 android:scaleType="centerCrop"
 android:src="@drawable/ic_launcher" />
 </FrameLayout>
 <com.example.zhy_horizontalscrollview03.MyRecyclerView
 android:id="@+id/id_recyclerview_horizontal"
 android:layout_width="match_parent"
 android:layout_height="120dp"
 android:layout_gravity="bottom"
 android:background="#FF0000"
 android:scrollbars="none" />
</LinearLayout> 

添加一个显示大图的区域,把RecyclerView改为自己定义的。

然后看我们自定义RecyclerView的代码:

package com.example.zhy_horizontalscrollview03;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class CopyOfMyRecyclerView extends RecyclerView
{
 public CopyOfMyRecyclerView(Context context, AttributeSet attrs)
 {
 super(context, attrs);
 }
 private View mCurrentView;
 /**
 * 滚动时回调的接口
 */
 private OnItemScrollChangeListener mItemScrollChangeListener;
 public void setOnItemScrollChangeListener(
 OnItemScrollChangeListener mItemScrollChangeListener)
 {
 this.mItemScrollChangeListener = mItemScrollChangeListener;
 }
 public interface OnItemScrollChangeListener
 {
 void onChange(View view, int position);
 }
 @Override
 protected void onLayout(boolean changed, int l, int t, int r, int b)
 {
 super.onLayout(changed, l, t, r, b);
 mCurrentView = getChildAt(0);
 if (mItemScrollChangeListener != null)
 {
 mItemScrollChangeListener.onChange(mCurrentView,
  getChildPosition(mCurrentView));
 }
 }
 @Override
 public boolean onTouchEvent(MotionEvent e)
 {
 if (e.getAction() == MotionEvent.ACTION_MOVE)
 {
 mCurrentView = getChildAt(0);
 // Log.e("TAG", getChildPosition(getChildAt(0)) + "");
 if (mItemScrollChangeListener != null)
 {
 mItemScrollChangeListener.onChange(mCurrentView,
  getChildPosition(mCurrentView));
 }
 }
 return super.onTouchEvent(e);
 }
} 

定义了一个滚动时回调的接口,然后在onTouchEvent中,监听ACTION_MOVE,用户手指滑动时,不断把当前第一个View回调回去~

关于我咋知道getChildAt(0)和getChildPosition()可用,起初我以为有getFirstVisibleItem这个方法,后来发现么有;但是发现了getRecycledViewPool()看名字我觉得是Viewholder那个缓存队列,我想那么直接取这个队列的第一个不就是我要的View么,后来没有成功。我就观察它内部的View,最后发现,第一个显示的始终是它第一个child,至于getChildPosition这个看方法就看出来了。

现在的效果:

和我之前那个例子的效果是一模一样的,不过,我还想做一些改变,我觉得Gallery或者说相册的指示器,下面可能1000来张图片,我不仅喜欢手指在屏幕上滑动时,图片会自动切换。我还希望,如果我给指示器一个加速度,即使手指离开,下面还在滑动,上面也会联动 。而且我还想做些优化,直接在ACTION_MOVE中回调,触发的频率太高了,理论上一张图片只会触发一次~~

4、优化与打造真正的Gallery效果

既然希望手指离开还能联动,那么不仅需要ACTION_MOVE需要监听,还得监听一个加速度,速度到达一定值,然后继续移动~~再理一理,需要这么麻烦么,不是能滚动么,那么应该有OnScrollListener啊,小看一把,果然有,哈哈哈~天助我也,下面看修改后的代码:

package com.example.zhy_horizontalscrollview03;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.OnScrollListener;
import android.util.AttributeSet;
import android.view.View;
public class MyRecyclerView extends RecyclerView implements OnScrollListener
{
 /**
 * 记录当前第一个View
 */
 private View mCurrentView;
 private OnItemScrollChangeListener mItemScrollChangeListener;
 public void setOnItemScrollChangeListener(
 OnItemScrollChangeListener mItemScrollChangeListener)
 {
 this.mItemScrollChangeListener = mItemScrollChangeListener;
 }
 public interface OnItemScrollChangeListener
 {
 void onChange(View view, int position);
 }
 public MyRecyclerView(Context context, AttributeSet attrs)
 {
 super(context, attrs);
 // TODO Auto-generated constructor stub
 this.setOnScrollListener(this);
 }
 @Override
 protected void onLayout(boolean changed, int l, int t, int r, int b)
 {
 super.onLayout(changed, l, t, r, b);
 mCurrentView = getChildAt(0);
 if (mItemScrollChangeListener != null)
 {
 mItemScrollChangeListener.onChange(mCurrentView,
  getChildPosition(mCurrentView));
 }
 }
 @Override
 public void onScrollStateChanged(int arg0)
 {
 }
 /**
 *
 * 滚动时,判断当前第一个View是否发生变化,发生才回调
 */
 @Override
 public void onScrolled(int arg0, int arg1)
 {
 View newView = getChildAt(0);
 if (mItemScrollChangeListener != null)
 {
 if (newView != null && newView != mCurrentView)
 {
 mCurrentView = newView ;
 mItemScrollChangeListener.onChange(mCurrentView,
  getChildPosition(mCurrentView));
 }
 }
 }
} 

我放弃了重写onTouchEvent方法,而是让这个类实现RecyclerView.OnScrollListener接口,然后设置监听,在onScrolled里面进行判断。

至于优化:我使用了一个成员变化存储当前第一个View,只有第一个View发生变化时才回调~~太完美了~

看MainActivity:

package com.example.zhy_horizontalscrollview03;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.Toast;
import com.example.zhy_horizontalscrollview03.GalleryAdapter.OnItemClickLitener;
import com.example.zhy_horizontalscrollview03.MyRecyclerView.OnItemScrollChangeListener;
public class MainActivity extends Activity
{
 private MyRecyclerView mRecyclerView;
 private GalleryAdapter mAdapter;
 private List<Integer> mDatas;
 private ImageView mImg ;
 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
 super.onCreate(savedInstanceState);
 requestWindowFeature(Window.FEATURE_NO_TITLE);
 setContentView(R.layout.activity_main);
 mImg = (ImageView) findViewById(R.id.id_content);
 mDatas = new ArrayList<Integer>(Arrays.asList(R.drawable.a,
 R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e,
 R.drawable.f, R.drawable.g, R.drawable.h, R.drawable.l));
 mRecyclerView = (MyRecyclerView) findViewById(R.id.id_recyclerview_horizontal);
 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
 linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
 mRecyclerView.setLayoutManager(linearLayoutManager);
 mAdapter = new GalleryAdapter(this, mDatas);
 mRecyclerView.setAdapter(mAdapter);
 mRecyclerView.setOnItemScrollChangeListener(new OnItemScrollChangeListener()
 {
 @Override
 public void onChange(View view, int position)
 {
 mImg.setImageResource(mDatas.get(position));
 };
 });
 mAdapter.setOnItemClickLitener(new OnItemClickLitener()
 {
 @Override
 public void onItemClick(View view, int position)
 {
// Toast.makeText(getApplicationContext(), position + "", Toast.LENGTH_SHORT)
//  .show();
 mImg.setImageResource(mDatas.get(position));
 }
 });
 }
} 

代码没什么变化~多了个设置回调~

效果图:

可以看到不仅支持手机在上面移动时的变化,如果我给了一个加速度,下面持续滚动,上面也会持续变化~~大赞~每张图片回调一次,效率也相当不错。

好了,看完这边博客,相信大家对于RecyclerView有了一定的认识,甚至对于如何改造一个控件也多了一份了解~~

如果觉得不错,就留个言或者点个赞,表示对我的支持

源码点击下载

总结

以上所述是小编给大家介绍的Android 使用自定义RecyclerView 实现Gallery效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android中RecyclerView实现多级折叠列表效果(TreeRecyclerView)

    前言 首先不得不吐槽一下产品,尼玛为啥要搞这样的功能....搞个两级的不就好了嘛...自带控件,多好.三级,四级,听说还有六级的....这样丧心病狂的设计,后台也不好给数据吧. 先看看效果: 两级的效果: 三级的效果: 全部展开的效果(我只写了五级) 说说为什么写这货吧: 公司产品提出三级这个需求后,我就在网上找啊找. 找的第一个,发现实现其实是ExpandListview嵌套. 找的第二个,ExpandRecyclview,然后就用呗,发现三级展开很卡,看源码, 发现是RecyclerView

  • Android Recyclerview实现多选,单选,全选,反选,批量删除的功能

    效果图如下: Recyclerview 实现多选,单选,全选,反选,批量删除的步骤 1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件 2.这里选中的控件没有用checkbox来做,用的是imageview,选中和不选中其实是两张图片 3.默认是不显示选中的控件的,点击编辑的时候显示,点击取消的时候隐藏 4.通过adapter和activity数据之间的传递,然后进行具体的操作 具体代码如下: 在recyclerview的布局中写全选,反选,删除,计数等相

  • Android中RecyclerView实现分页滚动的方法详解

    一.需求分析 最近公司项目要实现一个需求要满足以下功能: 1)显示一个 list 列表, item 数量不固定. 2)实现翻页功能,一次翻一页. 3)实现翻至某一页功能. 下面介绍通过 RecyclerView 实现该需求的实现过程(效果图如下). 二.功能实现 2.1 OnTouchListener 记录当前开始滑动位置 要实现翻页滑动首先我们要确定是向前翻页还是向后翻页,这里通过记录开始翻页前当前的位置和滑动后的位置比较即可得知,下面选择手指触摸按下时滑动的位置为当前开始滑动位置: //当前

  • Android中RecyclerView实现多级折叠列表效果(二)

    前言 在本文开始之前请大家先看一下这篇文章:http://www.jb51.net/article/113510.htm 上面的这篇文章是之前写的,里面发现有很多不好用地方,也学到些新姿势,改动了许多地方.下面来看看详细的介绍: 要点: 1.可以通过后台控制Item的展示. 2.TreeRecyclerAdapter,可以展开,折叠.多级展示 3.adapter可以使用装饰者模式进行扩展.支持EmptyAdapter.可以添加headview和footview 4.item的样式可以编写文档,t

  • Android 使用自定义RecyclerView控件实现Gallery效果

    上篇文章给大家介绍了Android 自定义 HorizontalScrollView 打造多图片OOM 的横向滑动效果.其实制作横向滚动的不得不说另一个控件,就是Google官方最近新增加的RecyclerView,据说是ListView的升级版本,本篇文章,首先介绍RecyclerView的用法,然后经行一定的分析:最后自定义一下RecyclerView实现我们需要的相册效果. 1.RecyclerView的基本用法 首先主Activity的布局文件: <RelativeLayout xmln

  • Android自定义View控件实现刷新效果

    三种得到LinearInflater的方法 a. LayoutInflater inflater = getLayoutInflater(); b. LayoutInflater localinflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); c. LayoutInflater inflater = LayoutInflater.from(context); onDraw 方法

  • Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码

    概述:通过自定义ImageView控件,在xml布局里面调用自定的组件实现图片的缩放. /** * 自定义的ImageView控制,可对图片进行多点触控缩放和拖动 * * @author qiuwanyong */ public class MyImageView extends ImageView { /** * 初始化状态常量 */ public static final int STATUS_INIT = 1; /** * 图片放大状态常量 */ public static final i

  • Android开发之RecyclerView控件

    现阶段,我们创建了最简单的Android项目,现在在此公布github链接https://github.com/neuyu/android-best-practices,希望大家多多支持. 因为之前谈到过包结构的定义,我选择第一种方式,按照Android特性定义,所以你的包结构应该是这样的: RecyclerView 在MainActivity中,我们需要用到RecyclerView这一新控件,那么如何引用,如何使用它呢?在gradle文件中添加库依赖: compile 'com.android

  • Android ScrollView实现向上滑动控件顶部悬浮效果

    本文参考了: <上滑停靠顶端的悬浮框>的代码,在此表示感谢.[上滑停靠顶端的悬浮框]里的实现方法是使用两个控件,滑动时,监听ScrollView的滚动Y值,从而通过对两个控件的显示隐藏来实现控件的顶部悬浮.但是实际应用场景中,有可能需要悬浮的控件里面的内容是比较多的,如果通过显示隐藏的方式来实现的话,操作控件里的内容时,需要重复定义两套变量,对控件里的内容进行修改时也是要操作再次,非常麻烦. 本文的方法是通过addView和removeView来实现的. 一.首先让ScrollView实现滚动

  • Android控件之Gallery用法实例分析

    本文实例讲述了Android控件之Gallery用法.分享给大家供大家参考.具体如下: Gallery组件主要用于横向显示图像列表,不过按常规做法.Gallery组件只能有限地显示指定的图像.也就是说,如果为Gallery组件指定了10张图像,那么当Gallery组件显示到第10张时,就不会再继续显示了.这虽然在大多数时候没有什么关系,但在某些情况下,我们希望图像显示到最后一张时再重第1张开始显示,也就是循环显示.要实现这种风格的Gallery组件,就需要对Gallery的Adapter对象进行

  • Android实现万能自定义阴影控件实例代码

    目录介绍 01.阴影效果有哪些实现方式 02.实现阴影效果Api 03.设置阴影需要注意哪些 04.常见Shape实现阴影效果 05.自定义阴影效果控件 06.如何使用该阴影控件 07.在recyclerView中使用注意点 01.阴影效果有哪些实现方式 阴影效果有哪些实现方式 第一种:使用CardView,但是不能设置阴影颜色 第二种:采用shape叠加,存在后期UI效果不便优化 第三种:UI切图 第四种:自定义View 否定上面前两种方案原因分析? 第一个方案的CardView渐变色和阴影效

  • android之视频播放系统VideoView和自定义VideoView控件的应用

    Android播放视频,包含系统自带VideoView控件,和自定义VideoView控件,可全屏播放,案例包含了本地视频和网络视频. 1:自定义VideoView控件 2:布局代码 3:Activity代码: 4:网络权限 5:效果图 小结:其中的Uri mUri = Uri.parse("android.resource://" + getPackageName() +"/"+ R.raw.qiche);//本地视频 是加载的本地视频,可以下载一个视频,在res

  • android自定义倒计时控件示例

    自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.content.Context;import android.content.res.TypedArray;import android.graphics.Paint;import android.text.Html;import android.util.AttributeSet;import android.widget.TextView; import com.new0315.R;

  • Android自定义表格控件满足人们对视觉的需求

    Android平台已经给我们提供了很多标准的组件,如:TextView.EditView.Button.ImageView.Menu等,还有许多布局控件,常见的有:AbsoluteLayout.LinerLayout.RelativeLayout.TableLayout等.但随着人们对视觉的需求,基本组件已无法满足人们求新求异的要求,于是我们常常会自定义组件,用来实现更美观的UI界面. 实现自定义控件通常有两种途径,一种是继承View类,重写其中的重要方法,另一种是继承ViewGroup类,通过

随机推荐