自定义开关按钮
来源:互联网 发布:mysql登录指定数据库 编辑:程序博客网 时间:2024/05/04 03:46
效果图
XML文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.example.slidebtn.SlideBtton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /></RelativeLayout>
主Activity
package com.example.slidebtn;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }}
自定义view
package com.example.slidebtn;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.View;/** * 创建自定义View的一般步骤 1.创建自定义view对象 构造方法 * 2.确定view的尺寸 onMeasure(intwidthMeasureSpec,int heightMeasureSpec) * 3.绘制view onDraw(Canvas canvas) * 4.确定在父View中的位置 onLayout() 通常我们并不关心这个方法 * */public class SlideBtton extends View implements android.view.View.OnClickListener { /** * 确定在父view中的位置 * */ @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { // TODO Auto-generated method stub super.onLayout(changed, left, top, right, bottom); } private Bitmap bg, btn; private int bg_w, bg_h, btn_w; private Paint paint; private float start_offset; boolean isopen = false; /** * 加载布局文件时调用 * */ public SlideBtton(Context context, AttributeSet attrs) { super(context, attrs); // 初始化资源 inite(); } private void inite() { bg = BitmapFactory.decodeResource(getResources(), R.drawable.switch_background); btn = BitmapFactory.decodeResource(getResources(), R.drawable.slide_button); bg_w = bg.getWidth(); bg_h = bg.getHeight(); btn_w = btn.getWidth(); paint = new Paint(); // 设置抗锯齿 paint.setAntiAlias(true); setOnClickListener(this); } /** * 绘制View * */ @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(bg, 0, 0, paint); canvas.drawBitmap(btn, start_offset, 0, paint); } /** * 确定View的尺寸 * */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(bg_w, bg_h); } @Override public void onClick(View v) { isopen = !isopen; if (isopen) { start_offset = bg_w - btn_w; } else { start_offset = 0; } //通知重新绘制 invalidate(); }}
1 0
- Android自定义开关按钮
- 自定义开关按钮
- android 自定义开关按钮
- 自定义开关按钮
- 自定义view_开关按钮
- 自定义开关按钮
- Android自定义开关按钮
- 自定义 Switch 开关按钮
- 自定义开关按钮
- 自定义开关按钮SwitchButton
- 自定义View开关按钮
- android 自定义开关按钮
- 自定义类似开关按钮
- 自定义开关按钮
- 自定义开关,仿苹果的开关按钮
- android自定义开关、图片按钮
- Android 中的自定义开关按钮
- 自定义滑动开关按钮-SwitchButton
- Android Studio Gradle 错误:gradle project sync failed basic functionality editing debugging
- Java设计模式——合成/聚合复用原则
- UVa: UVA - 10719 Quotient Polynomial
- PNG图片CRC校验码的计算过程和总结
- sql server 触发器
- 自定义开关按钮
- 蜂之道原浆补品--程序员要经常吃蜂蜜
- Linux LCD驱动中的LCD参数
- 关于java中的List集合的排序问题/Collections.sort()的使用(转)
- bzoj 3670: [Noi2014]动物园
- 封装好的Ajax调用函数以及基本方法总结
- 数据库调优教程(九) 添加了索引但不被使用的几种常见可能
- KNIMI数据挖掘建模与分析系列_001_利用KNIMI做演员关系网络分析
- 2015-4-12