Android利用自定义View实现简单的足球战术板

参考自:http://blog.csdn.net/lmj623565791/article/details/46858663

学习Android初期,之前接触了一些UI设计,突发奇想想要做一个简单的足球战术板(自己是个足球爱好者)。

原理很简单,也就是一个令View移动。

参考了网上有很多种方法,我这里是参考鸿洋的文章,利用ViewDragHelper实现View移动的目的。

先看一下效果图:





附上源码:

TacticsBoardLayout.class

package com.example.chen.tacticsboard;

import android.content.Context;
import android.support.v4.widget.ViewDragHelper;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;


public class TacticsBoardLayout extends LinearLayout
{
    private ViewDragHelper mDragger;

    protected void onFinshInflate(){
        super.onFinishInflate();
    }
    public TacticsBoardLayout(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        mDragger = ViewDragHelper.create(this, 1.0f, new ViewDragHelper.Callback()
        {
            /* 进行拦截,哪些view可以进行drag操作
            ** return true 代表拦截所有view
             */
            @Override
            public boolean tryCaptureView(View child, int pointerId)
            {

                return true;
            }
            //水平滑动,控制left
            @Override
            public int clampViewPositionHorizontal(View child, int left, int dx)
            {
                return left;
            }
            //垂直滑动,控制top
            @Override
            public int clampViewPositionVertical(View child, int top, int dy)
            {
                return top;
            }
        });
    }
  // 事件分发
   @Override
    public boolean onInterceptTouchEvent(MotionEvent event)
    {
        return mDragger.shouldInterceptTouchEvent(event);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        mDragger.processTouchEvent(event);
        return true;
    }

}

布局:activity_main

<?xml version="1.0" encoding="utf-8"?>
<com.example.chen.tacticsboard.TacticsBoardLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg"
    android:orientation="vertical"
    >

    <TextView
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:id="@+id/play1"
        android:background="@drawable/player"
        android:gravity="center"
        android:textSize="20dp"
        android:text="2"
        android:layout_marginLeft="150dp"
        android:textColor="#FFFFFF"
        android:layout_marginTop="100dp"


        />

    <TextView
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:id="@+id/play2"
        android:background="@drawable/player"
        android:gravity="center"
        android:textSize="20dp"
        android:text="3"
        android:layout_marginLeft="260dp"
        android:textColor="#FFFFFF"
        android:layout_centerVertical="true"

        />
    <TextView
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:id="@+id/play3"
        android:background="@drawable/player"
        android:gravity="center"
        android:textSize="20dp"
        android:text="7"
        android:textColor="#FFFFFF"
        android:layout_marginLeft="55dp"
        android:layout_marginTop="25dp"

        />
    <TextView
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:id="@+id/play4"
        android:background="@drawable/player"
        android:gravity="center"
        android:textSize="20dp"
        android:text="9"
        android:textColor="#FFFFFF"
        android:layout_marginLeft="190dp"
        android:layout_marginTop="35dp"

        />

    <TextView
        android:id="@+id/gk"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="27dp"
        android:background="@drawable/gk"
        android:gravity="center"
        android:text="1"
        android:textColor="#000000"
        android:textSize="18dp"
        android:layout_marginLeft="160dp"
        android:layout_marginTop="100dp"/>

</com.example.chen.tacticsboard.TacticsBoardLayout>

这里就是将子View实现最简单的移动,其中,我们可以通过child来设置移动的对象,以及在 clampViewPositionHorizontal和 clampViewPositionVertical

中,可以写上具体的想法为View移动进行更为详细的定制。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值