国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程之滑動按鈕事件實例詳解

2019-10-23 18:35:31
字體:
來源:轉載
供稿:網友

本文實例講述了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,0,slip_btn.getWidth(),slip_btn.getHeight());    Btn_Off = new Rect(        bg_off.getWidth()-slip_btn.getWidth(),        0,        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,matrix, 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, 0, 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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杭锦后旗| 黄浦区| 嘉义市| 桃园市| 安徽省| 昌都县| 信宜市| 色达县| 扶沟县| 新建县| 开阳县| 太仆寺旗| 台前县| 平塘县| 开鲁县| 庆元县| 常山县| 威海市| 黄平县| 休宁县| 贵阳市| 石门县| 斗六市| 海阳市| 长沙市| 且末县| 普陀区| 嵊泗县| 密云县| 顺昌县| 且末县| 高碑店市| 富川| 伊川县| 治县。| 山阴县| 盐池县| 汉沽区| 宜都市| 蓝田县| 多伦县|