Android编程之滑动按钮事件实例详解

Android编程之滑动按钮事件实例详解,第1张

概述本文实例讲述了Android滑动按钮事件。分享给大家供大家参考,具体如下:今天纪录一下滑动按钮功能。。

本文实例讲述了AndroID滑动按钮事件。分享给大家供大家参考,具体如下:

今天纪录一下滑动按钮功能。。

首先效果图:

然后是分别建立三个文件,第一个是main.class,第二个是Slipbutton.class,第三个是 onchangelistener.class

main.class

import AndroID.app.Activity;import androID.os.Bundle;import androID.Widget.Toast;public class Main extends Activity implements OnChangedListener {  /** Called when the activity is first created. */  @OverrIDe  public voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.main);    Slipbutton myBtn =(Slipbutton) findVIEwByID(R.ID.slipBtn);//获得指定控件    myBtn.SetonChangedListener(this);//为控件设置监听器  }  @OverrIDe  public voID OnChanged(boolean CheckState) {//当按钮状态被改变时    // Todo auto-generated method stub    if(CheckState)      Toast.makeText(this,"打开了...",Toast.LENGTH_SHORT).show();    else      Toast.makeText(this,"关闭了...",Toast.LENGTH_SHORT).show();  }}

Slipbutton.class

import androID.content.Context;import androID.graphics.Bitmap;import androID.graphics.BitmapFactory;import androID.graphics.Canvas;import androID.graphics.Matrix;import androID.graphics.Paint;import androID.graphics.Rect;import androID.util.AttributeSet;import androID.vIEw.MotionEvent;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OntouchListener;public class Slipbutton extends VIEw implements OntouchListener{  private boolean NowChoose = false;//记录当前按钮是否打开,true为打开,flase为关闭  private boolean OnSlip = false;//记录用户是否在滑动的变量  private float DownX,NowX;//按下时的x,当前的x,private Rect Btn_On,Btn_Off;//打开和关闭状态下,游标的Rect  private boolean isChgLsnOn = false;  private OnChangedListener ChgLsn;  private Bitmap bg_on,bg_off,slip_btn;  public Slipbutton(Context context) {    super(context);    // Todo auto-generated constructor stub    init();  }  public Slipbutton(Context context,AttributeSet attrs) {    super(context,attrs);    // Todo auto-generated constructor stub    init();  }  private voID init(){//初始化    //载入图片资源    bg_on = BitmapFactory.decodeResource(getResources(),R.drawable.slip_bg_on);    bg_off = BitmapFactory.decodeResource(getResources(),R.drawable.slip_bg_off);    slip_btn = BitmapFactory.decodeResource(getResources(),R.drawable.slip_btn);    //获得需要的Rect数据    Btn_On = new Rect(0,slip_btn.getWIDth(),slip_btn.getHeight());    Btn_Off = new Rect(        bg_off.getWIDth()-slip_btn.getWIDth(),bg_off.getWIDth(),slip_btn.getHeight());    setontouchListener(this);//设置监听器,也可以直接复写OntouchEvent  }  @OverrIDe  protected voID onDraw(Canvas canvas) {//绘图函数    // Todo auto-generated method stub    super.onDraw(canvas);    Matrix matrix = new Matrix();    Paint paint = new Paint();    float x;    {      if(NowX<(bg_on.getWIDth()/2))//滑动到前半段与后半段的背景不同,在此做判断        canvas.drawBitmap(bg_off,matrix,paint);//画出关闭时的背景      else        canvas.drawBitmap(bg_on,paint);//画出打开时的背景      if(OnSlip)//是否是在滑动状态,{        if(NowX >= bg_on.getWIDth())//是否划出指定范围,不能让游标跑到外头,必须做这个判断          x = bg_on.getWIDth()-slip_btn.getWIDth()/2;//减去游标1/2的长度...        else          x = NowX - slip_btn.getWIDth()/2;      }else{//非滑动状态        if(NowChoose)//根据现在的开关状态设置画游标的位置          x = Btn_Off.left;        else          x = Btn_On.left;      }    if(x<0)//对游标位置进行异常判断...      x = 0;    else if(x>bg_on.getWIDth()-slip_btn.getWIDth())      x = bg_on.getWIDth()-slip_btn.getWIDth();    canvas.drawBitmap(slip_btn,x,paint);//画出游标.    }  }  @OverrIDe  public boolean ontouch(VIEw v,MotionEvent event) {    // Todo auto-generated method stub    switch(event.getAction())//根据动作来执行代码    {    case MotionEvent.ACTION_MOVE://滑动      NowX = event.getX();      break;    case MotionEvent.ACTION_DOWN://按下    if(event.getX()>bg_on.getWIDth()||event.getY()>bg_on.getHeight())      return false;      OnSlip = true;      DownX = event.getX();      NowX = DownX;      break;    case MotionEvent.ACTION_UP://松开      OnSlip = false;      boolean LastChoose = NowChoose;      if(event.getX()>=(bg_on.getWIDth()/2))        NowChoose = true;      else        NowChoose = false;      if(isChgLsnOn&&(LastChoose!=NowChoose))//如果设置了监听器,就调用其方法..        ChgLsn.OnChanged(NowChoose);      break;    default:    }    invalIDate();//重画控件    return true;  }  public voID SetonChangedListener(OnChangedListener l){//设置监听器,当状态修改的时候    isChgLsnOn = true;    ChgLsn = l;  }}

onchangelistener.class

package CMD100.demo.slipbutton;public interface OnChangedListener {  abstract voID OnChanged(boolean CheckState);}

main.xml代码

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:orIEntation="vertical"  androID:layout_wIDth="fill_parent"  androID:layout_height="fill_parent"  ><TextVIEw  androID:layout_wIDth="fill_parent"  androID:layout_height="wrap_content"  androID:text="@string/hello"  /><linearLayout  androID:orIEntation = "horizontal"  androID:layout_wIDth = "fill_parent"  androID:layout_height = "wrap_content"  androID:background = "#ff0000"  >  <TextVIEw    androID:text = "测试:"    androID:layout_wIDth = "wrap_content"    androID:layout_height = "wrap_content"    />  <CMD100.demo.slipbutton.Slipbutton    androID:ID = "@+ID/slipBtn"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_marginleft = "10sp"  /></linearLayout></linearLayout>

注意:在xml里头要放置的位置

<[包名].Slipbutton    androID:ID = "@+ID/slipBtn"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    />

然后可以像其他控件一样使用了...

Slipbutton myBtn =(Slipbutton) findVIEwByID(R.ID.slipBtn);myBtn.SetonChangedListener(...);

代码到这里就全部完成了。

更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android布局layout技巧总结》、《Android视图View技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体 *** 作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》及《Android控件用法总结》

希望本文所述对大家AndroID程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android编程之滑动按钮事件实例详解全部内容,希望文章能够帮你解决Android编程之滑动按钮事件实例详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存