滑动解锁效果
来源:互联网 发布:淘宝邮票真假怎么鉴定 编辑:程序博客网 时间:2024/05/16 11:16
废话不多说,来看一下效果图。
类继承View
public class SlideLock extends View { private Bitmap jiesuo_bg; private Bitmap jiesuo_button; private int bg_width; private int bg_height; private int block_width; private int measuredWidth; private int measuredHeight; private float downX; private float downY; private float currentX; private float currentY; private boolean isOnBlock; private int left; private int right; private OnUnlockListener onUnlockListener; public SlideLock(Context context) { super(context); init(); } private void init() { jiesuo_bg = BitmapFactory.decodeResource(getResources(), R.mipmap.jiesuo_bg); jiesuo_button = BitmapFactory.decodeResource(getResources(), R.mipmap.jiesuo_button); bg_width = jiesuo_bg.getWidth(); bg_height = jiesuo_bg.getHeight(); block_width = jiesuo_button.getWidth(); } public SlideLock(Context context, AttributeSet attrs) { super(context, attrs); init(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); measuredWidth = getMeasuredWidth(); measuredHeight = getMeasuredHeight(); //获取一开始的位置 currentX = measuredWidth / 2 - bg_width / 2; currentY = measuredHeight / 2 - bg_height / 2; left = measuredWidth / 2 - bg_width / 2; right = measuredWidth/2+bg_width/2-block_width; } public SlideLock(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(jiesuo_bg, measuredWidth / 2 - bg_width / 2, measuredHeight / 2 - bg_height / 2, null); //控制边界 if(currentX<left){ currentX=left; }else if(currentX>right){ currentX=right; } canvas.drawBitmap(jiesuo_button, currentX, currentY, null); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //判断手指是否按在了小球上 downX = event.getX(); downY = event.getY(); isOnBlock = isOnBlock(downX,downY); if(isOnBlock){ Toast.makeText(getContext(),"按到了",Toast.LENGTH_SHORT).show(); } break; case MotionEvent.ACTION_MOVE: if(isOnBlock){ //获取最新的位置 float moveX = event.getX(); currentX=moveX-block_width/2; invalidate(); } break; case MotionEvent.ACTION_UP: isOnBlock=false; if(currentX<right-5){ //应该弹回去 currentX=left; }else{ if(onUnlockListener!=null){ Toast.makeText(getContext(), "解锁", Toast.LENGTH_SHORT).show(); onUnlockListener.setUnlock(true); } } invalidate(); break; case MotionEvent.ACTION_CANCEL: break; } return true; } private boolean isOnBlock(float downX, float downY) { //先计算圆心点 float rx = currentX + block_width / 2; float ry = currentY + block_width / 2; double distance = Math.sqrt((downX - rx) * (downX - rx) + (downY - ry) * (downY - ry)); if(distance<block_width/2){ return true; } return false; } public void setOnUnlockListener(OnUnlockListener onUnlockListener) { this.onUnlockListener=onUnlockListener; }}
实现一个接口
public interface OnUnlockListener { public void setUnlock(boolean unlock);}
MainActivity中
public class MainActivity extends AppCompatActivity { private ImageView imageView; private SlideLock slideLock; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); slideLock = (SlideLock) findViewById(R.id.slideLock); imageView = (ImageView) findViewById(R.id.imageView); slideLock.setOnUnlockListener(new OnUnlockListener(){ @Override public void setUnlock(boolean unlock) { if(unlock){ slideLock.setVisibility(View.GONE); imageView.setVisibility(View.VISIBLE); } } }); }}
XML布局
<com.example.a13683.eventdeliverymechanism.SlideLock android:id="@+id/slideLock" android:layout_width="match_parent" android:layout_height="match_parent" /><ImageView android:visibility="gone" android:id="@+id/imageView" android:src="@mipmap/bd" android:layout_width="match_parent" android:layout_height="match_parent" />!!!这里面使用的图片请自定义,如果想用我的图片,请私信我。
阅读全文
0 0
- 解锁滑动效果
- 滑动解锁效果
- android滑动解锁的震动效果
- CAGradientLayer实现"滑动来解锁"动画效果
- Axure做手机滑动解锁的效果
- iOS解锁界面的"滑动来解锁"闪烁动画效果
- iOS滑动解锁/滑动获取验证码效果实现
- 滑动解锁
- 滑动解锁
- 滑动解锁
- 滑动解锁
- 滑动解锁
- 仿ios全屏滑动解锁,带阴影效果
- CAGradientLayer实现向右滑动解锁的动画效果
- android滑动解锁
- hihoCoder 1054 : 滑动解锁
- hihocoder#1054 : 滑动解锁
- 解锁滑动渐变动画
- 蓝牙音响升压芯片,12V输出,FP6293
- Java基础之类之间的关系
- 康托 逆康托
- 【effective Java读书笔记】对于所有对象都通用的方法(二)
- H5项目常见问题及注意事项
- 滑动解锁效果
- HDU 3294Girls' research
- Open-falcon Agent模块rpc通信过程
- zigbee 关联表AssociatedDevList
- 从零开始搭建环境编写操作系统 AT&T GCC (十)多任务
- 10、maven学习总结
- leetcode--Number of Islands
- 16、购物单
- TFTP相关指令内容