开关
来源:互联网 发布:淘宝打印助手在哪里 编辑:程序博客网 时间:2024/05/19 23:12
package com.example111.sxy.a04;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by sxy on 2017/10/21. * 一个视图从创建到显示过程中的主要方法 * 1 构造方法实例化类 * 2测量measure(int,int)-->onMeasure(); * 如果当前View是一个viewGroud,还有义务测量孩子 * 如果孩子有建议权 * 3指定控件的位置layout()-->onlayout(); * 指定控件的位置,一般View不用写这个方法,viewGroup的时候才需要 * 4绘制视图 draw()---onDrow(canvas) * 根据上面两个方法参数,进入绘制 */public class MyToggleButton extends View implements View.OnClickListener{ private Bitmap backgroundBitmap; private Bitmap slidingBitmap; private int slidLeftMax; private int slidLeft = 0; private Paint paint; private boolean isopen = false; public MyToggleButton(Context context, @Nullable AttributeSet attrs) { super(context, attrs); initView(); } private void initView(){ paint = new Paint(); paint.setAntiAlias(true); backgroundBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.switch_background); slidingBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.slide_button); slidLeftMax = backgroundBitmap.getWidth()-slidingBitmap.getWidth(); setOnClickListener(this); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(backgroundBitmap.getWidth(),backgroundBitmap.getHeight()); } @Override protected void onDraw(Canvas canvas) {// super.onDraw(canvas); canvas.drawBitmap(backgroundBitmap,0,0,paint); canvas.drawBitmap(slidingBitmap,slidLeft,0,paint); } private boolean isEnableClick = true; @Override public void onClick(View view) { if(isEnableClick) { isopen = !isopen; } if(isopen) { slidLeft = slidLeftMax; }else { slidLeft = 0; } invalidate(); } public void flash(){ if(isopen) { slidLeft = slidLeftMax; }else { slidLeft = 0; } invalidate(); } private float startx; private float Lastx; @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: Lastx = startx = event.getRawX(); isEnableClick = true; break; case MotionEvent.ACTION_MOVE: float endx = event.getRawX(); float distancex = endx-startx; slidLeft = (int) (slidLeft+distancex); if(slidLeft<0) { slidLeft = 0; }else if(slidLeft>slidLeftMax) { slidLeft = slidLeftMax; } invalidate(); startx = event.getRawX(); if(Math.abs(endx-Lastx) > 5) { isEnableClick = false; } break; case MotionEvent.ACTION_UP: if(!isEnableClick) { if(slidLeft>slidLeftMax/2) { isopen = true; }else { isopen = false; } flash(); } break; } return true; }}
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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" tools:context="com.example111.sxy.a04.MainActivity" android:paddingBottom="16dp" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="16dp"> <com.example111.sxy.a04.MyToggleButton android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_centerInParent="true"/></RelativeLayout>
阅读全文
0 0
- 开关
- 开关
- 开关问题
- 开关稳压电源
- 光控开关
- 调试开关
- 开关稳压电源
- 宏开关
- 微动开关
- 编译器开关
- 开关控制电路
- 开关键盘
- debug 开关
- Log 开关
- 灯泡开关
- gprs开关
- 软件开关
- CCControlSwitch 开关
- poj1887 Testing the CATCHER
- Magento对属性集进行筛选得到属性值
- 2017.11.13笔记
- Java中的static关键字解析
- upstream prematurely closed connection while reading response header from upstream分析与解决
- 开关
- Windows消息机制
- git pull all branch
- 常见HTTP状态码
- 解决memory bound算法的一些建议
- HTTP之URI和URL
- Linux使用经验
- HDU 6241 Color a Tree CCPC2017 Harbin(二分答案+上下界判定)
- 日常总结