如何在android上实现IPhone的按钮滑动效果
2014-10-11 22:25
701 查看
要实现苹果的按钮动画效果首先肯定要自定义控件。
资源文件
package com.jrrjw.button; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat; import android.util.AttributeSet; import android.util.MonthDisplayHelper; import android.view.MotionEvent; import android.view.View; public class MyView extends View { private Bitmap backgroundImg; private Bitmap sildeImg; private Paint paint; int sliderPosition = 0; MyClickListener clickListener; boolean isOpen = false; int firstPosition = 0; int lastPosition = 0; boolean isClick = true; public MyView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } /** * 第一步 初始化view 把一些图片,资源加载到对象里 第二步 告诉ViewGroup 你自定义的这个view的宽和高onMeasure 第三步 * 告诉ViewGroup你的view的布局,一般默认 第四步 onDraw,开始画你的view * 移动的思路: 首先记录下手指按下的时候的位置,然后判断手指移动的位置,如果位置很少然后就松开了则为点击,否则让图片跟着手指走,当手指松开的时候 * 判断图片的位置是否可以设置成开或者关, */ private void initView() { //初始化背景图 backgroundImg = BitmapFactory.decodeResource(getResources(), R.drawable.switch_background); //初始化按钮 sildeImg = BitmapFactory.decodeResource(getResources(), R.drawable.slide_button); //初始化画笔 paint = new Paint(); paint.setAntiAlias(false); // 取消锯齿 clickListener = new MyClickListener(); setOnClickListener(clickListener); } /** *设置触摸事件 */ public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); //获得动作 switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //当用户按下的时候记录第一位置,和最后位置 firstPosition = lastPosition = (int) event.getX(); //因为在android中的事件传递机制,先执行触摸事件,然后才会由点击事件,这里先取消点击事件 isClick = false; if (Math.abs(event.getX() - firstPosition) < 10) { isClick = true; } break; case MotionEvent.ACTION_MOVE: //判断移动的距离,如果距离够远,才算是拖动,否则则是点击 if (Math.abs(event.getX() - firstPosition) < 10) { isClick = true; } else { isClick = false; } System.out.println(isClick + "click is move event position" + event.getX() + "firstposition " + firstPosition); int dip = (int) (event.getX() - lastPosition); lastPosition = (int) event.getX(); sliderPosition += dip; // influeState(); break; case MotionEvent.ACTION_UP: System.out.println(isClick + "click is up"); //判断是不是点击,如果是点击,就传递给点击事件去做 if (!isClick) { int po = (backgroundImg.getWidth() - sildeImg.getWidth()) / 2; System.out.println(sliderPosition + "position:" + po); if (sliderPosition < po) { isOpen = false; } else { isOpen = true; } //最后刷新状态 influeState(); } break; } infueView(); return true; } private void infueView() { // 判断SlidePosition的值是否合法 int maxLeft = backgroundImg.getWidth() - sildeImg.getWidth(); // slideBtn // 左边届最大值 // 确保 slideBtn_left >= 0 sliderPosition = (sliderPosition > 0) ? sliderPosition : 0; // 确保 slideBtn_left <=maxLeft sliderPosition = (sliderPosition < maxLeft) ? sliderPosition : maxLeft; invalidate(); } private class MyClickListener implements OnClickListener { @Override public void onClick(View v) { if (isClick) { System.out.println("被点击了"); isClick = !isClick; influeState(); } } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(backgroundImg.getWidth(), backgroundImg.getHeight()); // 告诉viewgroup 他的宽和高 } /** * 修改按钮的位置 */ public void influeState() { //判断按钮是否为打开状态 if (isOpen) { sliderPosition = backgroundImg.getWidth() - sildeImg.getWidth(); System.out.println("isopen " + sliderPosition); } else { sliderPosition = 0; } isOpen = !isOpen; infueView(); } @Override protected void onDraw(Canvas canvas) { //画两张图片 canvas.drawBitmap(backgroundImg, 0, 0, paint); canvas.drawBitmap(sildeImg, sliderPosition, 0, paint); } }
资源文件
相关文章推荐
- 如何在Android中实现渐显按钮的左右滑动效果
- Android实现渐显按钮的左右滑动效果
- Android实现渐显按钮的左右滑动效果
- Android实现渐显按钮的左右滑动效果
- Android实现渐显按钮的左右滑动效果
- android 中如何实现listview向左边滑动跟微信删除好友一样的效果?
- Android实现渐显按钮的左右滑动效果
- Android实现渐显按钮的左右滑动效果
- Android实现渐显按钮的左右滑动效果
- android 中如何实现listview向左边滑动跟微信删除好友一样的效果?
- Android实现渐显按钮的左右滑动效果
- android Gallery组件实现的iPhone图片滑动效果实例
- 如何在Android中实现左右滑动的指引效果
- 本文给大家介绍在Android中如何实现顶部导航菜单左右滑动效果。
- 按下按钮后页面的滚动条向下(或向上)滑动,松开之后便停留在当前位置的效果如何实现?
- android如何实现按钮的点击水波纹效果:
- android 中如何实现listview向左边滑动跟微信删除好友一样的效果?
- Android 开关按钮切换,类似于iphone 效果,view实现
- 按下按钮后页面的滚动条向下(或向上)滑动,松开之后便停留在当前位置的效果如何实现?
- Android 开关按钮切换,类似于iphone 效果,view实现