废话不多说,先上图:
这个是开始时候的模样(讲道理有点幼稚,因为这个是 苹果软件商店的一款游戏,懒得反编译,所以图片都是自己扣的)
这个是拼好以后的模样,同时有语音提示(“太棒啦”)哈哈哈,很搞笑
当然 我只是模仿一下,同时弥补一下自己还不清晰的知识,按照我的做法是很简单的。下面就是我的整体思路:
1. 当然是去截一波图了,没办法,不会画
2.就是实现把 中间整体的白色的“人”放在中间 同时“人”的其它部位放在四周 这里就用 了imageview
3.就是让控件随着你的手指移动
4.移动到一定位置的时候需要自动对齐一下,比如说你在移动手的时候,不需要很精确到达白色“人”手的位置,到达附近的时候就可以自己对齐了,这样整个游戏玩起来流畅一些
5.最后就是当你全部移动好了 ,出现三颗星星 说一声“你真棒”
开始实现思路:
1.截图反正就是PS抠图,这个不是重点。
2.这里用了 layoutparams,在代码中实现对控件位置的动态赋值(对每一个imageview都做一下)
layoutParams = new RelativeLayout.LayoutParams(161,176);//设置图片大小 layoutParams.leftMargin=200;//与画布左边距离 layoutParams.topMargin = 200;//与画布顶部距离 _lian.setLayoutParams(layoutParams);//绑定到对应LayoutParams _lian.setOnTouchListener(this);//设置监听事件
3.这个就是重写一下onTouch函数 具体代码下面给出
4.判断一下 你当前的位置,距离目标位置绝对值相差50px(x坐标,y坐标都要)以内的时候,直接把图片放到目标位置
5.给个flag,每个部位成功了,flag++;直到全部成功,输出声音。
下面是代码,很简单,而且代码哟注释有,有不懂可以评论。
<?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" android:id="@+id/root" tools:context=".move_activity" > <ImageView android:id="@+id/id_shen_ti" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/shen_ti" android:layout_centerInParent="true" /> <ImageView android:id="@+id/id_lian" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/lian" android:layout_centerInParent="true" /> <ImageView android:id="@+id/id_mao_zi" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/mao_zi" android:layout_centerInParent="true"/> <ImageView android:id="@+id/id_you_shou" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/you_shou" android:layout_centerInParent="true" /> <ImageView android:id="@+id/id_you_tui" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/you_tui" android:layout_centerInParent="true" /> <ImageView android:id="@+id/id_zuo_shou" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/zuo_shou" android:layout_centerInParent="true" /> <ImageView android:id="@+id/id_zuo_tui" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/zuo_tui" android:layout_centerInParent="true" /> <ImageView android:id="@+id/id_yi_fu" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/yi_fu" android:layout_centerInParent="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="get" android:text="get" android:layout_alignParentBottom="true"/> </RelativeLayout>
package com.example.admin.yi_mi_yang_guang; import android.content.Intent; import android.media.Image; import android.os.Build; import android.support.constraint.ConstraintLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; public class move_activity extends AppCompatActivity implements View.OnTouchListener{ ImageView _lian,_shen_ti,_mao_zi,_yi_fu,_you_tui,_you_shou,_zuo_tui,_zuo_shou; ViewGroup _root; private int lastX, lastY; // final static int IMAGE_SIZE = 72; RelativeLayout.LayoutParams layoutParams; RelativeLayout.LayoutParams layoutParams2; RelativeLayout.LayoutParams layoutParams3; RelativeLayout.LayoutParams layoutParams4; RelativeLayout.LayoutParams layoutParams5; RelativeLayout.LayoutParams layoutParams6; RelativeLayout.LayoutParams layoutParams7; RelativeLayout.LayoutParams layoutParams8; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_move_activity); getWindow().getDecorView().setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { if (visibility == View.SYSTEM_UI_FLAG_VISIBLE) { onWindowFocusChanged(true); } } }); _root = (ViewGroup) findViewById(R.id.root); //绑定图片 _lian = (ImageView) findViewById(R.id.id_lian); _shen_ti = (ImageView) findViewById(R.id.id_shen_ti); _mao_zi = (ImageView) findViewById(R.id.id_mao_zi); _yi_fu = (ImageView) findViewById(R.id.id_yi_fu); _you_tui = (ImageView) findViewById(R.id.id_you_tui); _you_shou = (ImageView) findViewById(R.id.id_you_shou); _zuo_tui = (ImageView) findViewById(R.id.id_zuo_tui); _zuo_shou = (ImageView) findViewById(R.id.id_zuo_shou); layoutParams = new RelativeLayout.LayoutParams(161,176);//设置图片大小 layoutParams.leftMargin=200;//与画布左边距离 layoutParams.topMargin = 200;//与画布顶部距离 _lian.setLayoutParams(layoutParams);//绑定到对应LayoutParams _lian.setOnTouchListener(this);//设置监听事件 layoutParams2 = new RelativeLayout.LayoutParams( 360, 619); layoutParams2.leftMargin = 400; layoutParams2.topMargin = 400; _shen_ti.setLayoutParams(layoutParams2); _shen_ti.setOnTouchListener(this); layoutParams3 = new RelativeLayout.LayoutParams( 185, 106); layoutParams3.leftMargin = 200; layoutParams3.topMargin = 600; _mao_zi.setLayoutParams(layoutParams3); _mao_zi.setOnTouchListener(this); layoutParams4 = new RelativeLayout.LayoutParams( 207, 216); layoutParams4.leftMargin = 400; layoutParams4.topMargin = 200; _yi_fu.setLayoutParams(layoutParams4); _yi_fu.setOnTouchListener(this); layoutParams5 = new RelativeLayout.LayoutParams( 121, 204); layoutParams5.leftMargin = 400; layoutParams5.topMargin = 600; _you_tui.setLayoutParams(layoutParams5); _you_tui.setOnTouchListener(this); layoutParams6 = new RelativeLayout.LayoutParams( 122, 228); layoutParams6.leftMargin = 600; layoutParams6.topMargin = 200; _you_shou.setLayoutParams(layoutParams6); _you_shou.setOnTouchListener(this); layoutParams7 = new RelativeLayout.LayoutParams( 115, 215); layoutParams7.leftMargin = 600; layoutParams7.topMargin = 400; _zuo_tui.setLayoutParams(layoutParams7); _zuo_tui.setOnTouchListener(this); layoutParams8 = new RelativeLayout.LayoutParams( 119, 230); layoutParams8.leftMargin = 800; layoutParams8.topMargin = 400; _zuo_shou.setLayoutParams(layoutParams8); _zuo_shou.setOnTouchListener(this); } public boolean onTouch(View view, MotionEvent event) { final int X = (int) event.getRawX(); final int Y = (int) event.getRawY(); switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); /* RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view .getLayoutParams();*/ break; case MotionEvent.ACTION_UP: break; case MotionEvent.ACTION_POINTER_DOWN: break; case MotionEvent.ACTION_POINTER_UP: break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX() - lastX; int dy = (int) event.getRawY() - lastY; int left = view.getLeft() + dx; int top = view.getTop() + dy; RelativeLayout.LayoutParams layoutParams_ = (RelativeLayout.LayoutParams) view .getLayoutParams(); if(layoutParams_==layoutParams) { layoutParams_.leftMargin = left; layoutParams_.topMargin = top; if (left >= 447 && left <= 547 && top >= 387 && top <= 487) { layoutParams_.leftMargin = 497; layoutParams_.topMargin = 437; } view.setLayoutParams(layoutParams_); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); } //自动对齐 lian if(layoutParams_==layoutParams3) { layoutParams_.leftMargin = left; layoutParams_.topMargin = top; if(left>=484-50&&left<=484+50&&top>=400-50&&top<=400+50) { layoutParams_.leftMargin = 484; layoutParams_.topMargin = 400; } view.setLayoutParams(layoutParams_); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); }//自动对齐 mao_zi if(layoutParams_==layoutParams4) { layoutParams_.leftMargin = left; layoutParams_.topMargin = top; if(left>=478-50&&left<=478+50&&top>=603-50&&top<=603+50) { layoutParams_.leftMargin = 478; layoutParams_.topMargin = 603; } view.setLayoutParams(layoutParams_); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); }//自动对齐 yi_fu if(layoutParams_==layoutParams5) { layoutParams_.leftMargin = left; layoutParams_.topMargin = top; if(left>=571-50&&left<=571+50&&top>=820-50&&top<=820+50) { layoutParams_.leftMargin = 571; layoutParams_.topMargin = 820; } view.setLayoutParams(layoutParams_); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); }//自动对齐 you_tui if(layoutParams_==layoutParams6) { layoutParams_.leftMargin = left; layoutParams_.topMargin = top; if(left>=636-50&&left<=636+50&&top>=623-50&&top<=623+50) { layoutParams_.leftMargin = 636; layoutParams_.topMargin = 623; } view.setLayoutParams(layoutParams_); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); }//自动对齐 you_shou if(layoutParams_==layoutParams7) { layoutParams_.leftMargin = left; layoutParams_.topMargin = top; if(left>=472-50&&left<=472+50&&top>=820-50&&top<=820+50) { layoutParams_.leftMargin = 472; layoutParams_.topMargin = 820; } view.setLayoutParams(layoutParams_); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); }//自动对齐 zuo_tui if(layoutParams_==layoutParams8) { layoutParams_.leftMargin = left; layoutParams_.topMargin = top; if(left>=400-50&&left<=400+50&&top>=616-50&&top<=616+50) { layoutParams_.leftMargin = 400; layoutParams_.topMargin = 616; } view.setLayoutParams(layoutParams_); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); }//自动对齐 zuo_tui break; } _root.invalidate(); return true; } public void get(View v){ Intent intent = new Intent(move_activity.this,shou_ye_activity.class); startActivity(intent); } @Override //沉浸式,去掉状态栏,去掉 public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus && Build.VERSION.SDK_INT >= 19) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } } }
东西很简单,没什么技术含量,就是一个小东西,记录一下!