自定义Button

来源:互联网 发布:人人视频 mac客户端 编辑:程序博客网 时间:2024/04/30 00:19

//实现效果



//Main

package com.bw.viewbutton;import android.os.Bundle;import android.app.Activity;public class MainActivity extends Activity {private MyButton bt;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bt = (MyButton) findViewById(R.id.button);bt.setBackgroundDrawableResource(R.drawable.switch_background);bt.setForegroundDrawableResource(R.drawable.slide_button_background);bt.setCheckdsate(true);}}

//自定义view

package com.bw.viewbutton;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;public class MyButton extends View {private boolean state = false;private Bitmap backResource;private Bitmap foreResource;private int eventx;private boolean isstate;public MyButton(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public MyButton(Context context, AttributeSet attrs) {super(context, attrs);}public MyButton(Context context) {super(context);}public void setBackgroundDrawableResource(int switchBackground) {backResource = BitmapFactory.decodeResource(getResources(),switchBackground);}public void setForegroundDrawableResource(int slideButtonBackground) {foreResource = BitmapFactory.decodeResource(getResources(),slideButtonBackground);}public void setCheckdsate(boolean b) {this.state = b;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// TODO Auto-generated method stubsuper.onMeasure(widthMeasureSpec, heightMeasureSpec);setMeasuredDimension(backResource.getWidth(), backResource.getHeight());}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawBitmap(backResource, 0, 0, null);if (isstate) {int left = eventx - foreResource.getWidth() / 2;if (left < 0) {left = 0;} else if (left > backResource.getWidth() - foreResource.getWidth()) {left = backResource.getWidth() - foreResource.getWidth();}canvas.drawBitmap(foreResource, left, 0, null);} else {if (state) {canvas.drawBitmap(foreResource, backResource.getWidth() - foreResource.getWidth(), 0, null);} else {canvas.drawBitmap(foreResource, 0, 0, null);}}}@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubswitch (event.getAction()) {case MotionEvent.ACTION_DOWN:isstate = true;eventx = (int) event.getX();break;case MotionEvent.ACTION_MOVE:eventx = (int) event.getX();break;case MotionEvent.ACTION_UP:isstate = false;eventx = (int) event.getX();state = eventx > backResource.getWidth()/2;break;default:break;}invalidate();return true;}}



0 0