package com.example.switchbuttom; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; import com.example.switchbuttom.views.SwitchButtom; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SwitchButtom myButtom = (SwitchButtom) findViewById(R.id.mybutton); //在外部设置监听 myButtom.setOnStateChange(new SwitchButtom.OnStateChangeListener() { @Override public void onStateChange(boolean state) { Toast.makeText(MainActivity.this,"当前状态---"+state,Toast.LENGTH_SHORT).show(); } }); }}
SwitchButtom
package com.example.switchbuttom.views; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import com.example.switchbuttom.R; /** * Created by 张世祥 on 2017/12/27. */ public class SwitchButtom extends View { private Bitmap background; private Bitmap slide; private boolean state; private OnStateChangeListener onStateChangeListener; public SwitchButtom(Context context) { this(context,null); } public SwitchButtom(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public SwitchButtom(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //初始化两张图片 //将资料原文件转换Bitmap对象 //getResources()包含图片资源对对象 background = BitmapFactory.decodeResource(getResources(), R.drawable.background); slide= BitmapFactory.decodeResource(getResources(),R.drawable.slide); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //绘制 //参数1:图片对象 //参数2.X轴的开始位置 //参数3.y轴的开始位置 //参数4.画笔 canvas.drawBitmap(background,0,0,null); int left=0; if(isTouch){ left = currentX - slide.getWidth() / 2; if(left<0){ left=0; } if(left>background.getWidth()-slide.getWidth()){ left=background.getWidth()-slide.getWidth(); } canvas.drawBitmap(slide,left,0,null); }else{ if(state){ left=background.getWidth()-slide.getWidth(); }else{ left=0; } canvas.drawBitmap(slide,left,0,null); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(background.getWidth(), background.getHeight()); } public void setState(boolean state){ this.state=state; } public boolean getState(){ return state; }; private int currentX; private boolean isTouch; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: isTouch=true; currentX=(int) event.getX(); break; case MotionEvent.ACTION_MOVE: currentX=(int) event.getX(); break; case MotionEvent.ACTION_UP: isTouch=false; currentX=(int) event.getX(); int centerX=background.getWidth()/2; if(currentX>centerX){ state=true; }else { state=false; } onStateChangeListener.onStateChange(state); break; } invalidate(); return true; } public interface OnStateChangeListener{ void onStateChange(boolean state); } //提供一个外部访问的方法 public void setOnStateChange(OnStateChangeListener onStateChangeListener){ this.onStateChangeListener = onStateChangeListener; } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.switchbuttom.MainActivity"> <com.example.switchbuttom.views.SwitchButtom android:id="@+id/mybutton" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
开关滑块
最新推荐文章于 2024-04-30 02:48:34 发布