Android 自定义接口

简介: 前提1、各位看官大家好,小可今天又来装,啊呸,又来写干货来了。在自定义Android接口之前先要搞清楚什么是接口2、接口定义大家都知道Android是基于Java语言开发的,嗯,之前是,当然现在也有Kotin,今天主要讲解Java方面。

前提

1、各位看官大家好,小可今天又来装,啊呸,又来写干货来了。在自定义Android接口之前先要搞清楚什么是接口
2、接口定义

  • 大家都知道Android是基于Java语言开发的,嗯,之前是,当然现在也有Kotin,今天主要讲解Java方面。
  • 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
  • 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
  • 接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
    3、实现方法
  • 相信上面对接口的说明大家都可以理解,但是,自定义接口又是什么样子的呢,相信还是比较抽象的,所以今天就小可就在此举一个例子来介绍一下

首先

  • 先分析一下,我们今天要自定义的接口要有什么诉求(即要实现什么功能)自定义接口是为了更好的传递我们想要传递的值。
  • 大家都知道Recyclerview没有自带点击事件,今天就以Recyclerview的点击事件为例,来介绍一下自定义接口
  • 定义一个接口类
  public interface OnItemClickListener {
    //第一个参数是适配器的item,第二个参数是位置
    - 短按事件
   void OnItemClick(View view,int position);
      长按事件
   void OnItemLongClick(View view,int position);
 }

其次

  • 要实现Recyclerview的点击事件,当然要定义一个适配器了
  public class CustomAdapter extends RecyclerView.Adapter
    <CustomAdapter.CustomViewHolder> {

   private List<CustomBean> mList;
   private Context mContext;
   private LayoutInflater mInflater;
   private OnItemClickListener mOnItemClickListener;

public CustomAdapter(List<CustomBean> mList, Context context) {
    this.mList = mList;
    this.mContext = context;
    this.mInflater = LayoutInflater.from(mContext);
}

@Override
public CustomViewHolder onCreateViewHolder(ViewGroup 
parent, int viewType) {
    View view = mInflater.inflate(R.layout.item_custom_layout, 
parent, false);
    CustomViewHolder viewHolder = new CustomViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder( CustomViewHolder holder, int position) {
    holder.mTxtItemTitle.setText(mList.get(position).getTitle());
    holder.mTxtItemContent.setText(mList.get(position).getContent());
    //设置点击事件
   setUIEvent(holder);
}

@Override
public int getItemCount() {
    return mList==null?0:mList.size();
}

class CustomViewHolder extends RecyclerView.ViewHolder {

    TextView mTxtItemTitle, mTxtItemContent;

    public CustomViewHolder(View itemView) {
        super(itemView);
        mTxtItemTitle = itemView.findViewById(R.id.txt_item_title);
        mTxtItemContent = itemView.findViewById(R.id.txt_item_content);
    }
}

/**
 * 设置点击事件
 * @param holder
 */
public void setUIEvent(final CustomViewHolder holder){
    //点击事假,首先判断是否为空,不为空的时候再进行操作
    if (mOnItemClickListener != null) {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int layoutPosition = holder.getLayoutPosition();
                mOnItemClickListener.OnItemClick(holder.itemView, layoutPosition);
            }
        });
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                int layoutPosition = holder.getLayoutPosition();
                mOnItemClickListener.OnItemLongClick(holder.itemView, layoutPosition);
                return false;
            }
        });
    }
}

/**
 * 提供给Activity或者Fragment调用的
 *
 * @param onItemClickListener
 */
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
    this.mOnItemClickListener = onItemClickListener;
}
 }

在适配器里面对接口的调用已经很清晰明了了,相信各位看官已经看懂了吧。

再次

  • 当然,现在就是在Activity里面怎么实现接口回调了

    public class ThirdActivity extends BaseActivity implements 
     OnItemClickListener{
    
     RecyclerView mRecyclerView;
     List<CustomBean>mList=new ArrayList<>();
     CustomAdapter mAdapter;
    
    @Override
    public void setContentView() {
      setContentView(R.layout.activity_third);
    }
    
    @Override
    public void initView() {
      mRecyclerView = $(R.id.recyclerView);
      mRecyclerView.setLayoutManager(new 
    LinearLayoutManager(this));
      mAdapter= new CustomAdapter(mList,this);
      mAdapter.setOnItemClickListener(this);
      mRecyclerView.setAdapter(mAdapter);
      
     }
    
     @Override
    public void initData() {
    
      }
    
    @Override
     public void initClick(View view) {
    
     }
    
    @Override
    public void setListener() {
    
    }
    
    @Override
    public void OnItemClick(View view, int position) {
      ToastUtils.showMessage(this,getResources().getString(R.string.click_item));
    }
    
    @Override
    public void OnItemLongClick(View view, int position) {
    
    }
    }
    
  • 到此,自定义接口形成了一个圆满的回调,当然还有其他回调写法,再举一个例子讲解一下。依然是在适配器中实现

img_0d9fb0a09aa00c600015ab9851186b7b.png
适配器图.png
  • 来看图,这个就是上面实现的适配器图片,然后我们想对内容这个字段加上点击事件该怎么做呢?相信聪明如你的看官已经想到了。即对内容这个TextView加上点击事件即可,话不多说上代码:

    /**
      * 点击内容的接口
      */
    public interface OnItemContentClickListener{
     //点击事件
      void OnContentClick(int position);
      //长按事件
      void OnContentLongClick(int position);
    }
    
  • 由上面的接口可以看到此接口主要实现了点击内容区域获取内容对应的位置的数据(然后实现跳转功能即可)

    /**
     * 点击内容那个TextView对应的调用
     * @param onContentListener
     */
      public void setOnContentListener(OnItemContentClickListener 
    onContentListener){
     this.mOnItemContentClickListener=onContentListener;
    }
    
  • 最后在Activity中进行调用了

     mAdapter.setOnContentListener(new 
    CustomAdapter.OnItemContentClickListener() {
          @Override
          public void OnContentClick(int position) {
              ToastUtils.showMessage(ThirdActivity.this,
                      getResources().getString(R.string.click_item_content));
          }
    
          @Override
          public void OnContentLongClick(int position) {
    
          }
      });
    
  • 可以看到这里是采用匿名内部来的方式来实现的,这样写可以更直观一点,但是看着比较乱一点(仁者见仁,智者见智)

最后

  • 当然,自定义接口还有很多写法,还需要大家去探索,我这里只是抛砖引玉。
  • 针对自定义接口今天就讲到这里,希望对大家有所帮助,如果有哪里讲的不到位的地方,还请大家见谅,并且告诉我一声,谢谢。
相关文章
|
7月前
|
Android开发 UED 计算机视觉
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
本文介绍了一款受游戏“金铲铲之战”启发的Android自定义View——线条等待动画的实现过程。通过将布局分为10份,利用`onSizeChanged`测量最小长度,并借助画笔绘制动态线条,实现渐变伸缩效果。动画逻辑通过四个变量控制线条的增长与回退,最终形成流畅的等待动画。代码中详细展示了画笔初始化、线条绘制及动画更新的核心步骤,并提供完整源码供参考。此动画适用于加载场景,提升用户体验。
548 5
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
|
7月前
|
Android开发
Android自定义view之利用PathEffect实现动态效果
本文介绍如何在Android自定义View中利用`PathEffect`实现动态效果。通过改变偏移量,结合`PathEffect`的子类(如`CornerPathEffect`、`DashPathEffect`、`PathDashPathEffect`等)实现路径绘制的动态变化。文章详细解析了各子类的功能与参数,并通过案例代码展示了如何使用`ComposePathEffect`组合效果,以及通过修改偏移量实现动画。最终效果为一个菱形图案沿路径运动,源码附于文末供参考。
140 0
|
7月前
|
Android开发 开发者
Android自定义view之利用drawArc方法实现动态效果
本文介绍了如何通过Android自定义View实现动态效果,重点使用`drawArc`方法完成圆弧动画。首先通过`onSizeChanged`进行测量,初始化画笔属性,设置圆弧相关参数。核心思路是不断改变圆弧扫过角度`sweepAngle`,并调用`invalidate()`刷新View以实现动态旋转效果。最后附上完整代码与效果图,帮助开发者快速理解并实践这一动画实现方式。
193 0
|
7月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
139 0
|
7月前
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
371 65
Android自定义view之网易云推荐歌单界面
|
7月前
|
XML 前端开发 Android开发
一篇文章带你走近Android自定义view
这是一篇关于Android自定义View的全面教程,涵盖从基础到进阶的知识点。文章首先讲解了自定义View的必要性及简单实现(如通过三个构造函数解决焦点问题),接着深入探讨Canvas绘图、自定义属性设置、动画实现等内容。还提供了具体案例,如跑马灯、折线图、太极图等。此外,文章详细解析了View绘制流程(measure、layout、draw)和事件分发机制。最后延伸至SurfaceView、GLSurfaceView、SVG动画等高级主题,并附带GitHub案例供实践。适合希望深入理解Android自定义View的开发者学习参考。
701 84
|
7月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
212 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
缓存 前端开发 Android开发
安卓开发中的自定义视图:从零到英雄
【10月更文挑战第42天】 在安卓的世界里,自定义视图是一块画布,让开发者能够绘制出独一无二的界面体验。本文将带你走进自定义视图的大门,通过深入浅出的方式,让你从零基础到能够独立设计并实现复杂的自定义组件。我们将探索自定义视图的核心概念、实现步骤,以及如何优化你的视图以提高性能和兼容性。准备好了吗?让我们开始这段创造性的旅程吧!
208 1
|
7月前
|
前端开发 Android开发 UED
讲讲Android为自定义view提供的SurfaceView
本文详细介绍了Android中自定义View时使用SurfaceView的必要性和实现方式。首先分析了在复杂绘制逻辑和高频界面更新场景下,传统View可能引发卡顿的问题,进而引出SurfaceView作为解决方案。文章通过Android官方Demo展示了SurfaceView的基本用法,包括实现`SurfaceHolder.Callback2`接口、与Activity生命周期绑定、子线程中使用`lockCanvas()`和`unlockCanvasAndPost()`方法完成绘图操作。
220 3
|
7月前
|
Android开发 开发者
Android自定义view之围棋动画(化繁为简)
本文介绍了Android自定义View的动画实现,通过两个案例拓展动态效果。第一个案例基于`drawArc`方法实现单次动画,借助布尔值控制动画流程。第二个案例以围棋动画为例,从简单的小球直线运动到双向变速运动,最终实现循环动画效果。代码结构清晰,逻辑简明,展示了如何化繁为简实现复杂动画,帮助读者拓展动态效果设计思路。文末提供完整源码,适合初学者和进阶开发者学习参考。
144 0
Android自定义view之围棋动画(化繁为简)

热门文章

最新文章