导航:首页 > 操作系统 > android自定义接口回调

android自定义接口回调

发布时间:2023-01-29 08:47:38

android怎么在popupwindow中实现接口回调

你在B中实现c的get和set方法。在A中调用setC(this),就可以了
public class A extends Activity implements C{

@Override
public void in(int a) {
// TODO Auto-generated method stub
System.out.println(a);
}
PopupWindow p = new PopupWindow();
p.setC(this);
}

public class B extends PopupWindow{
C c;
public B() {
// TODO Auto-generated constructor stub
//怎么实例化C啊
//c=new ??
c.in(100);
}
public void setC(C c){
this.c = c;
}
public interface C{
public void in(int a);
}
}

㈡ android 回调方法怎么写

package com.smart;
/**
* 定义回调接口
*/
public interface CallBack {
void execute();
}

package com.smart;
/**
* 工具类
*/
public class Tools {
public void test(CallBack callBack){
long begin = System.currentTimeMillis(); //测试起始时间
callBack.execute();///进行回调操作
long end = System.currentTimeMillis(); //测试结束时间
System.out.println("[use time]:" + (end - begin)); //打印使用时间

}
public static void main(String[] args){
Tools tools = new Tools();
tools.test(new CallBack(){
public void execute() {
//A.method(); 测试类A的某个方法执行的时间
//B.method(); 测试类B的某个方式执行的时间
System.out.print("回调" );
}
});
}
}
package com.smart;
/**
* 工具类
*/
public class Tools {
public void test(CallBack callBack){
long begin = System.currentTimeMillis();//测试起始时间
callBack.execute();///进行回调操作
long end = System.currentTimeMillis();//测试结束时间
System.out.println("[use time]:" + (end - begin));//打印使用时间

}
public static void main(String[] args){
Tools tools = new Tools();
tools.test(new CallBack(){
public void execute() {
//A.method(); 测试类A的某个方法执行的时间
//B.method(); 测试类B的某个方式执行的时间
System.out.print("回调");
}
});
}
}

㈢ android单例中的监听如何回调

1) OnClickListener 接口
此接口处理的是单击事件,例如,在 View 上进行单击动作,在 View 获得焦点的情况下单击“确定”按钮或者单击轨迹球都会触发该事件。
当单击事件发生时,OnClickListener 接口会回调 public void onClick(View v) 方法对事件进行处理。其中参数 v 指的是发生单击事件的 View 组件。
2) OnLongClickListener 接口
此接口处理的是长按事件,当长时间按住某个 View 组件时触发该事件。
其对应的回调方法为 public boolean onLongClick(View v),当返回 true 时,表示已经处理完此事件,若事件未处理完,则返回 false,该事件还可以继续被其他监听器捕获并处理。
3) OnFocusChangeListener 接口
此接口用于处理 View 组件焦点改变事件。当 View 组件失去或获得焦点时会触发该事件。
其对应的回调方法为 public void onFocusChange(View v, Boolean hasFocus),其中参数 v 表示产生事件的事件源,hasFocus 表示事件源的状态,即是否获得焦点。
4) OnKeyListener 接口
此接口用于对手机键盘事件进行监听,当View获得焦点并且键盘被敲击时会触发该事件。
其对应的回调方法为 public boolean onKey(View v, int keyCode, KeyEvent event)。

㈣ Android里怎么接口回调的方法从fragment向Activity传值

接口回调实现步骤
1:定义接口
2:activity实现接口,实现接口方法
3:fragment得到接口对象,在内容加载完后调用接口方法
4:在activity中接口回调方法得到回传值
fragment---->接口回调--->activity

㈤ Android 自定义仿京东地址选择器

public class AddressPickerViewextends RelativeLayout{

// recyclerView 选中Item 的颜色

    private int defaultSelectedColor = Color.parseColor("#3D71FF");

    // recyclerView 未选中Item 的颜色

    private int defaultUnSelectedColor = Color.parseColor("#2c2c2c");

    // 确定字体不可以点击时候的颜色

    private int defaultSureUnClickColor = Color.parseColor("#7F7F7F");

    // 确定字体可以点击时候的颜色

    private int defaultSureCanClickColor = Color.parseColor("#3D71FF");

    private ContextmContext;

    private int defaultTabCount =3; //tab 的数量

    private TabLayoutmTabLayout; // tabLayout

    private RecyclerViewmRvList; // 显示数据的RecyclerView

    private StringdefaultProvince ="省份"; //显示在上面tab中的省份

    private StringdefaultCity ="城市"; //显示在上面tab中的城市

    private StringdefaultDistrict ="区县"; //显示在上面tab中的区县

    private ListmRvData; // 用来在recyclerview显示的数据

    private AddressAdaptermAdapter;  // recyclerview 的adapter

    private YwpAddressBeanmYwpAddressBean; // 总数据

    private YwpAddressBean.AddressItemBeanmSelectProvice; //选中 省份bean

    private YwpAddressBean.AddressItemBeanmSelectCity;//选中 城市bean

    private YwpAddressBean.;//选中 区县bean

    private int mSelectProvicePosition =0; //选中 省份 位置

    private int mSelectCityPosition =0;//选中 城市  位置

    private int mSelectDistrictPosition =0;//选中 区县  位置

    private ;

    public AddressPickerView(Context context) {

super(context);

        init(context);

    }

public AddressPickerView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

        init(context);

    }

public AddressPickerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

        init(context);

    }

/**

    * 初始化

    */

    private void init(Context context) {

mContext = context;

        mRvData =new ArrayList<>();

        // UI

        View rootView =inflate(mContext, R.layout.address_picker_view, this);

        // tablayout初始化

        mTabLayout = (TabLayout) rootView.findViewById(R.id.tlTabLayout);

        mTabLayout.addTab(mTabLayout.newTab().setText(defaultProvince));

        mTabLayout.addTab(mTabLayout.newTab().setText(defaultCity));

        mTabLayout.addTab(mTabLayout.newTab().setText(defaultDistrict));

        mTabLayout.addOnTabSelectedListener(tabSelectedListener);

        // recyclerview adapter的绑定

        mRvList = (RecyclerView) rootView.findViewById(R.id.rvList);

        mRvList.setLayoutManager(new LinearLayoutManager(context));

        mAdapter =new AddressAdapter();

        mRvList.setAdapter(mAdapter);

        // 初始化默认的本地数据  也提供了方法接收外面数据

        mRvList.post(new Runnable() {

@Override

            public void run() {

initData();

            }

});

    }

/**

    * 初始化数据

    * 拿assets下的json文件

    */

    private void initData() {

StringBuilder jsonSB =new StringBuilder();

        try {

BufferedReader addressJsonStream =new BufferedReader(new InputStreamReader(mContext.getAssets().open("address.json")));

            String line;

            while ((line = addressJsonStream.readLine()) !=null) {

jsonSB.append(line);

            }

}catch (IOException e) {

e.printStackTrace();

        }

// 将数据转换为对象

        mYwpAddressBean =new Gson().fromJson(jsonSB.toString(), YwpAddressBean.class);

        if (mYwpAddressBean !=null) {

mRvData.clear();

            mRvData.addAll(mYwpAddressBean.getProvince());

            mAdapter.notifyDataSetChanged();

        }

}

/**

    * 开放给外部传入数据

    * 暂时就用这个Bean模型,如果数据不一致就需要各自根据数据来生成这个bean了

    */

    public void initData(YwpAddressBean bean) {

if (bean !=null) {

mSelectDistrict =null;

            mSelectCity =null;

            mSelectProvice =null;

            mTabLayout.getTabAt(0).select();

            mYwpAddressBean = bean;

            mRvData.clear();

            mRvData.addAll(mYwpAddressBean.getProvince());

            mAdapter.notifyDataSetChanged();

        }

}

//点确定

    private void sure() {

if (mSelectProvice !=null &&

mSelectCity !=null &&

mSelectDistrict !=null) {

//  回调接口

            if (mOnAddressPickerSureListener !=null) {

mOnAddressPickerSureListener.onSureClick(mSelectProvice.getN(), mSelectCity.getN(), mSelectDistrict.getN());

            }

}else {

Toast.makeText(mContext, "地址还没有选完整哦", Toast.LENGTH_SHORT).show();

        }

}

@Override

    protected void onDetachedFromWindow() {

super.onDetachedFromWindow();

      // mYwpAddressBean = null;

    }

/**

    * TabLayout 切换事件

    */

    TabLayout. =new TabLayout.OnTabSelectedListener() {

@Override

        public void onTabSelected(TabLayout.Tab tab) {

mRvData.clear();

            switch (tab.getPosition()) {

case 0:

mRvData.addAll(mYwpAddressBean.getProvince());

                    mAdapter.notifyDataSetChanged();

                    // 滚动到这个位置

                    mRvList.smoothScrollToPosition(mSelectProvicePosition);

break;

                case 1:

// 点到城市的时候要判断有没有选择省份

                    if (mSelectProvice !=null) {

for (YwpAddressBean.AddressItemBean itemBean :mYwpAddressBean.getCity()) {

if (itemBean.getP().equals(mSelectProvice.getI()))

mRvData.add(itemBean);

                        }

}else {

Toast.makeText(mContext, "请您先选择省份", Toast.LENGTH_SHORT).show();

                    }

mAdapter.notifyDataSetChanged();

                    // 滚动到这个位置

                    mRvList.smoothScrollToPosition(mSelectCityPosition);

break;

                case 2:

// 点到区的时候要判断有没有选择省份与城市

                    if (mSelectProvice !=null &&mSelectCity !=null) {

for (YwpAddressBean.AddressItemBean itemBean :mYwpAddressBean.getDistrict()) {

if (itemBean.getP().equals(mSelectCity.getI()))

mRvData.add(itemBean);

                        }

}else {

Toast.makeText(mContext, "请您先选择省份与城市", Toast.LENGTH_SHORT).show();

                    }

mAdapter.notifyDataSetChanged();

                    // 滚动到这个位置

                    mRvList.smoothScrollToPosition(mSelectDistrictPosition);

break;

            }

}

@Override

        public void onTabUnselected(TabLayout.Tab tab) {

}

@Override

        public void onTabReselected(TabLayout.Tab tab) {

}

};

    /**

    * 下面显示数据的adapter

*/

    class AddressAdapterextends RecyclerView.Adapter {

@Override

        public ViewHolderonCreateViewHolder(ViewGroup parent, int viewType) {

return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_address_text, parent, false));

        }

@Override

        public void onBindViewHolder(final ViewHolder holder, final int position) {

final int tabSelectPosition =mTabLayout.getSelectedTabPosition();

            holder.mTitle.setText(mRvData.get(position).getN());

            holder.mTitle.setTextColor(defaultUnSelectedColor);

            // 设置选中效果的颜色

            switch (tabSelectPosition) {

case 0:

if (mRvData.get(position) !=null &&

mSelectProvice !=null &&

mRvData.get(position).getI().equals(mSelectProvice.getI())) {

holder.mTitle.setTextColor(defaultSelectedColor);

                    }

break;

                case 1:

if (mRvData.get(position) !=null &&

mSelectCity !=null &&

mRvData.get(position).getI().equals(mSelectCity.getI())) {

holder.mTitle.setTextColor(defaultSelectedColor);

                    }

break;

                case 2:

if (mRvData.get(position) !=null &&

mSelectDistrict !=null &&

mRvData.get(position).getI().equals(mSelectDistrict.getI())) {

holder.mTitle.setTextColor(defaultSelectedColor);

                    }

break;

            }

// 设置点击之后的事件

            holder.mTitle.setOnClickListener(new OnClickListener() {

@Override

                public void onClick(View v) {

// 点击 分类别

                    switch (tabSelectPosition) {

case 0:

mSelectProvice =mRvData.get(position);

                            // 清空后面两个的数据

                            mSelectCity =null;

                            mSelectDistrict =null;

                            mSelectCityPosition =0;

                            mSelectDistrictPosition =0;

                            mTabLayout.getTabAt(1).setText(defaultCity);

                            mTabLayout.getTabAt(2).setText(defaultDistrict);

                            // 设置这个对应的标题

                            mTabLayout.getTabAt(0).setText(mSelectProvice.getN());

                            // 跳到下一个选择

                            mTabLayout.getTabAt(1).select();

                            mSelectProvicePosition =position;

break;

                        case 1:

mSelectCity =mRvData.get(position);

                            // 清空后面一个的数据

                            mSelectDistrict =null;

                            mSelectDistrictPosition =0;

                            mTabLayout.getTabAt(2).setText(defaultDistrict);

                            // 设置这个对应的标题

                            mTabLayout.getTabAt(1).setText(mSelectCity.getN());

                            // 跳到下一个选择

                            mTabLayout.getTabAt(2).select();

                            mSelectCityPosition =position;

break;

                        case 2:

mSelectDistrict =mRvData.get(position);

                            // 没了,选完了,这个时候可以点确定了

                            mTabLayout.getTabAt(2).setText(mSelectDistrict.getN());

                            notifyDataSetChanged();

                            mSelectDistrictPosition =position;

                            sure();

break;

                    }

}

});

        }

@Override

        public int getItemCount() {

return mRvData.size();

        }

class ViewHolderextends RecyclerView.ViewHolder {

TextViewmTitle;

            ViewHolder(View itemView) {

super(itemView);

                mTitle = (TextView) itemView.findViewById(R.id.itemTvTitle);

            }

}

}

/**

    * 点确定回调这个接口

    */

    public interface OnAddressPickerSureListener {

void onSureClick(String proviceName,String cityName,String earaName);

    }

public void setOnAddressPickerSure(OnAddressPickerSureListener listener) {

this.mOnAddressPickerSureListener = listener;

    }

㈥ Android接口回调总结,以及运用到弹窗PopWindow的Demo实现

最近项目中接触到接口回调,以及Android弹窗PopWindow组件的使用,现在利用学到的知识自己写了一个简单的Demo,练习下在Android下如何运用接口回调,来实现弹窗PopWindow的功能。

1. 定义一个接口:OnSelectItemListener。定义一个方法 void selectItem(String name, int type),作为点击弹窗的每个Item的回调接口。

2. 自定义弹窗类:MyPopupWindow,其布局文件为popup_window.xml。当在MainActivity调用其构造函数创建对象时,同时执行initPopupWindow()函数,给每个Item设置监听器,监听点击Item时,回调接口函数selectItem("Pop Window A", POP_WINDOW_ITEM_1),该函数在MainActivity中实现。

3. 主Activity: MainActivity。其布局文件为一个Button和一个TextView。监听Button,每当点击则弹出PopWindow,呈现三个Item。调用MyPopupWindow类中的方法setOnSelectItemListener(OnSelectItemListener listener),传入OnSelectItemListener 对象作为参数,同时实现回调接口OnSelectItemListener的方法void selectItem(String name, int type)。

主Activity: MainActivity. java

[java] view plain

packagecom.lambdroid.callbacktest2;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.TextView;

importandroid.widget.Toast;

//联系接口的回调以及PopWindow弹窗的简单使用

 {

privateMyPopupWindow myPopupWindow;

privateButton btn_pop_window;

privateTextView tv_display;

protectedContext context;

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

context =this;

btn_pop_window = (Button) findViewById(R.id.btn_pop_window);

tv_display = (TextView) findViewById(R.id.tv_display);

//给Button设置事件监听:弹出弹窗

btn_pop_window.setOnClickListener(newView.OnClickListener() {

@Override

publicvoidonClick(View v) {

myPopupWindow.show(btn_pop_window);

}

});

myPopupWindow =newMyPopupWindow(context);

//实现OnSelectItemListener接口的selectItem方法:对于弹窗三个Item的事件监听

myPopupWindow.setOnSelectItemListener(newOnSelectItemListener() {

@Override

publicvoidselectItem(String name,inttype) {

//点击电站列表,弹出弹框

if(myPopupWindow !=null&& myPopupWindow.isShowing()) {

myPopupWindow.dismiss();

}

tv_display.setText(name);

switch(type){

caseMyPopupWindow.POP_WINDOW_ITEM_1:

Toast.makeText(context,"我是弹窗A, 我的英文名是"+ name, Toast.LENGTH_SHORT).show();

break;

caseMyPopupWindow.POP_WINDOW_ITEM_2:

Toast.makeText(context,"我是弹窗B, 我的英文名是"+ name, Toast.LENGTH_SHORT).show();

break;

caseMyPopupWindow.POP_WINDOW_ITEM_3:

Toast.makeText(context,"我是弹窗C, 我的英文名是"+ name, Toast.LENGTH_SHORT).show();

break;

default:

break;

}

}

});

}

}

activity_main.xml

[html] view plain

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/btn_pop_window"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:layout_margin="20dp"

android:padding="20dp"

android:text="Pop Window"

android:textSize="20sp"/>

android:id="@+id/tv_display"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_marginTop="10dp"

android:gravity="center"

android:text="Hello World!"

android:textSize="30sp"/>

自定义弹窗类:MyPopupWindow.java

[java] view plain

packagecom.lambdroid.callbacktest2;

importandroid.app.ActionBar;

importandroid.content.Context;

importandroid.graphics.drawable.ColorDrawable;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.widget.LinearLayout;

importandroid.widget.PopupWindow;

.OnClickListener{

privatePopupWindow mPopWindow;

privateContext mContext;

privateLinearLayout llPop1;

privateLinearLayout llPop2;

privateLinearLayout llPop3;

privateintpw_height;

publicstaticfinalintPOP_WINDOW_ITEM_1 =1;

publicstaticfinalintPOP_WINDOW_ITEM_2 =2;

publicstaticfinalintPOP_WINDOW_ITEM_3 =3;

privateOnSelectItemListener listener;

(OnSelectItemListener listener){

this.listener = listener;

}

publicMyPopupWindow(Context context){

mContext = context;

initPopupWindow();//初始化弹窗

}

publicvoidinitPopupWindow(){

View view = LayoutInflater.from(mContext).inflate(R.layout.popup_window,null);

mPopWindow =newPopupWindow(view, ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT,true);

mPopWindow.setOutsideTouchable(true);

/** 为其设置背景,使得其内外焦点都可以获得 */

mPopWindow.setBackgroundDrawable(newColorDrawable());

mPopWindow.setFocusable(true);

pw_height = view.getHeight();

llPop1 = (LinearLayout) view.findViewById(R.id.ll_pop_1);

llPop1.setOnClickListener(this);

llPop2 = (LinearLayout) view.findViewById(R.id.ll_pop_2);

llPop2.setOnClickListener(this);

llPop3 = (LinearLayout) view.findViewById(R.id.ll_pop_3);

llPop3.setOnClickListener(this);

}

//监听三个弹窗的点击事件

@Override

publicvoidonClick(View v) {

switch(v.getId()){

caseR.id.ll_pop_1:

if(listener !=null) {

listener.selectItem("Pop Window A", POP_WINDOW_ITEM_1);//回调接口

}

break;

caseR.id.ll_pop_2:

if(listener !=null) {

listener.selectItem("Pop Window B", POP_WINDOW_ITEM_2);

}

break;

caseR.id.ll_pop_3:

if(listener !=null) {

listener.selectItem("Pop Window C", POP_WINDOW_ITEM_1);

}

break;

default:

break;

}

}

//显示弹窗,并设置弹窗基于标题栏的显示位置

publicvoidshow(View view) {

//popupwindow相对view位置x轴偏移量

View viewTemp = mPopWindow.getContentView();

viewTemp.measure(0,0);

intwidth = viewTemp.getMeasuredWidth();

intxOffset = (view.getWidth() - width) /2;

mPopWindow.showAsDropDown(view, xOffset,0);

}

/**

* 退出popupwindow

*/

publicvoiddismiss() {

if(mPopWindow !=null&& mPopWindow.isShowing()) {

mPopWindow.dismiss();

}

}

/**

* popupwindow是否正在显示

*/

publicbooleanisShowing() {

if(mPopWindow !=null) {

returnmPopWindow.isShowing();

}

returnfalse;

}

}

popup_window.xml

[html] view plain

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="vertical">

android:id="@+id/ll_alarm_type"

android:layout_width="120dp"

android:layout_height="130dp"

android:orientation="vertical"

android:background="@drawable/popupwindow"

android:paddingBottom="16dp"

android:paddingTop="16dp">

android:id="@+id/ll_pop_1"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

android:layout_marginTop="5dp"

android:layout_gravity="center_horizontal"

android:orientation="vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:text="窗口 A"

android:textSize="15sp"

android:textColor="#ffffff"/>

android:id="@+id/ll_pop_2"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

android:layout_gravity="center_horizontal"

android:orientation="vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:text="窗口 B"

android:textSize="15sp"

android:textColor="#ffffff"/>

android:id="@+id/ll_pop_3"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

android:layout_gravity="center_horizontal"

android:orientation="vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:text="窗口 C"

android:textSize="15sp"

android:textColor="#FFFFFF"/>

回调接口:OnSelectItemListener

[java] view plain

packagecom.lambdroid.callbacktest2;

 {

voidselectItem(String name,inttype);

}

点击Button,弹出弹窗,显示三个Item

点击第二个Item,通过回调函数,来实现TextView内容的修改,以及弹出Toast

总结

Java回调情形涉及很多,本文属于接口的异步回调:当不知道何时会执行接口的回调函数,(通过接口回调来对获取到的资源的操作)。除此还有线程间的异步回调(子线程进行耗时操作,操作完毕通知主线程或将数据传给主线程处理),以及利用接口回调来实现线程间的数据通信等等(Android可以利用Handler来实现)。等下次再举例说明Java回调函数的其它情形。

㈦ android最基本-自定义回调

仅以此篇记录最最基本的接口回调的处理,常见的使用是:recyclerview的条目点击事件...

以recylerview的条目点击事件为例,步骤:
1.在Adapter中定义MyOnItemClickListener接口, 在接口中定义抽象方法

㈧ Android 自定义控件中实现接口回调时为什么影响界面绘线

SurfaceView是View的子类,它内嵌了一个专门用于绘制的Surface,你可以控制这个Surface的格式和尺寸,Surfaceview控制这个Surface的绘制位置。surface是纵深排序(Z-ordered)的,说明它总在自己所在窗口的后面。SurfaceView提供了一个可见区域,只有在这个可见区域内的surface内容才可见。surface的排版显示受到视图层级关系的影响,它的兄弟视图结点会在顶端显示。这意味者 surface的内容会被它的兄弟视图遮挡,这一特性可以用来放置遮盖物(overlays)(例如,文本和按钮等控件)。注意,如果surface上面有透明控件,那么每次surface变化都会引起框架重新计算它和顶层控件的透明效果,这会影响性能。
SurfaceView默认使用双缓冲技术的,它支持在子线程中绘制图像,这样就不会阻塞主线程了,所以它更适合于游戏的开发。

SurfaceView的使用
首先继承SurfaceView,并实现SurfaceHolder.Callback接口,实现它的三个方法:surfaceCreated,surfaceChanged,surfaceDestroyed。
surfaceCreated(SurfaceHolder holder):surface创建的时候调用,一般在该方法中启动绘图的线程。
surfaceChanged(SurfaceHolder holder, int format, int width,int height):surface尺寸发生改变的时候调用,如横竖屏切换。
surfaceDestroyed(SurfaceHolder holder) :surface被销毁的时候调用,如退出游戏画面,一般在该方法中停止绘图线程。
还需要获得SurfaceHolder,并添加回调函数,这样这三个方法才会执行。

SurfaceView实战
下面通过一个小demo来学习SurfaceView在实际项目中的使用,绘制一个精灵,该精灵有四个方向的行走动画,让精灵沿着屏幕四周不停的行走。

㈨ android接口回调的几种

可以使用Observer,观察者模式来实现回调。或者接口中传入类,然后在接口处理之后,进行调用类的方法进行回调。
接口回调示例
public interface ConfirmDialogListener{
public void onLeft(Object obj); //按确认键
public void onRight(Object obj);//按back键
}
public static Dialog confirmDialog(final Context activity, final ConfirmDialogListener listener,final Object obj){

if(listener != null)
listener.onRight(obj);
}

阅读全文

与android自定义接口回调相关的资料

热点内容
微信大转盘抽奖源码 浏览:495
压缩机损坏的表现 浏览:862
同步数据服务器怎么用 浏览:634
163邮箱服务器的ip地址 浏览:48
服务器跟域是什么 浏览:126
rails启动命令 浏览:463
logistic命令怎么用 浏览:736
c语言点滴pdf 浏览:747
linuxrtc编程 浏览:256
linux打包并压缩命令 浏览:642
aes加密的证书格式 浏览:99
oracledbcalinux 浏览:842
酬勤任务app怎么被特邀 浏览:197
android应用文件夹 浏览:1000
平面设计法则pdf 浏览:339
3d圆角命令怎么用 浏览:567
程序员买意外险还是重疾险 浏览:619
辽宁的dns服务器地址云空间 浏览:448
我的世界服务器断开后怎么连接 浏览:413
htmltopdfpython 浏览:75