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

首頁 > 系統 > Android > 正文

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

2019-12-12 03:27:55
字體:
來源:轉載
供稿:網友

本文實例講述了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布局layout技巧總結》、《Android視圖View技巧總結》、《Android開發入門與進階教程》、《Android調試技巧與常見問題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九江市| 化州市| 博野县| 岳池县| 广昌县| 彩票| 德格县| 舟山市| 娱乐| 巴楚县| 巴塘县| 金川县| 康定县| 綦江县| 社旗县| 沭阳县| 蚌埠市| 清流县| 永和县| 大邑县| 乌兰察布市| 桓台县| 肇源县| 得荣县| 黔西| 东乌珠穆沁旗| 鱼台县| 新平| 沁水县| 宁明县| 阿图什市| 云霄县| 饶阳县| 桃园市| 都匀市| 湾仔区| 保定市| 望江县| 宿迁市| 准格尔旗| 黄石市|