android菜鸡提升之路---实现一个积木拼图游戏

废话不多说,先上图:

   这个是开始时候的模样(讲道理有点幼稚,因为这个是 苹果软件商店的一款游戏,懒得反编译,所以图片都是自己扣的)

 这个是拼好以后的模样,同时有语音提示(“太棒啦”)哈哈哈,很搞笑

当然 我只是模仿一下,同时弥补一下自己还不清晰的知识,按照我的做法是很简单的。下面就是我的整体思路:

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);
        }
    }
}
 


东西很简单,没什么技术含量,就是一个小东西,记录一下!



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值