Android跟踪球-手势移动图片-自定义控件(附源码)

由于我不会制作动画图片,所以先放几及其不具备代表性的展示图片.

我以前的思路是通过动态的设置xy坐标通过手势移动来识别,但是我后来试了一下,发现运行效果极差.所以偷闲做了下这个跟踪球控件,其实实现十分简单.只要大家熟悉自定义控件的使用以及手势识别.基本上就ok了.

现在我们看下这个控件的源码TouchMoveView.java


package com.fay.touchmove;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
/**
* moving by gesture
* @author Fay
* @since 2014/5/27
* {@link [email protected]}
*/
public class TouchMoveView extends View {

private String TAG = "TouchMoveView";
/**
* the default bitmap for the TouchMoveView
*/
private Bitmap defaultBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

/**
* the width of the default bitmap
*/
private int width = defaultBitmap.getWidth();

/**
* the height of the default bitmap
*/
private int height = defaultBitmap.getHeight();

/**
* the x-Location of the bitmap
*/
private float xLocation = 0;

/**
* the y-Location of the bitmap
*/
private float yLocation = 0;

public TouchMoveView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

public TouchMoveView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public TouchMoveView(Context context) {
super(context);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(defaultBitmap, xLocation, yLocation, null);
}

@SuppressLint("NewApi")
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
float x = event.getX();
float y = event.getY();
if (xLocation <= x && x <= xLocation + width && yLocation <= y && y <= yLocation + height) {
//continue
} else {
return false;//end the event
}
break;
case MotionEvent.ACTION_MOVE:
xLocation = event.getX();
yLocation = event.getY();
break;
case MotionEvent.ACTION_UP:
break;
}
invalidate();
return true;
}

public Bitmap getDefaultBitmap() {
return defaultBitmap;
}

public void setDefaultBitmap(Bitmap defaultBitmap) {
this.defaultBitmap = defaultBitmap;
//update the width and the height of the default bitmap
width = defaultBitmap.getWidth();
height = defaultBitmap.getHeight();
}

public float getxLocation() {
return xLocation;
}

/**
* set the initialized X-Location
* @param int xLocation
*/
public void setxLocation(float xLocation) {
this.xLocation = xLocation;
}

public float getyLocation() {
return yLocation;
}

/**
* set the initialized y-Location
* @param int yLocation
*/
public void setyLocation(float yLocation) {
this.yLocation = yLocation;
}

}

然后看下这个MainActivity.java


package com.fay.touchmove;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;

@SuppressLint("NewApi")
public class MainActivity extends Activity {
private String TAG = "MainActivity";
private TouchMoveView mTouchMoveView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTouchMoveView = (TouchMoveView)findViewById(R.id.imageview);
// mTouchMoveView.setDefaultBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.lock_selected));
// mTouchMoveView.setxLocation(100);
// mTouchMoveView.setyLocation(100);
}

}

我们应该能看到在这个Activity中可以很方便的设置移动的图片,以及初始化的x,y坐标.移动过程中通过不断的画图.注意的是,这个控件是全屏的.所以这点的话需要理解.
整个过程及其简单,方便.希望对一些朋友有所帮助.

源码下载:http://files.cnblogs.com/yinweiliang/TouchMove.zip

Android跟踪球-手势移动图片-自定义控件(附源码),布布扣,bubuko.com

时间: 2024-10-10 19:29:11

Android跟踪球-手势移动图片-自定义控件(附源码)的相关文章

Android侧边栏的自定义实现(附源码)

本文要实现手指在手机上向左或向右移动时,能相应的移动左右两个视图.通过自定义来实现,不借助第三方插件. 先来看看效果:(源码免费下载) 目录: 一.实现思路 二.代码清单 三.效果与说明 下面,让我们开始吧: 一.实现思路 1.思路 菜单在左,内容在右,然后菜单显示时和手机右边框有一定的间隔,内容显示一小部分.内容全部显示时,菜单全部不可见.如下面两个图 显示内容 显示菜单 2.判断逻辑 这是判断手指按着屏幕和手指抬起时要不要显示还是隐藏菜单 二.代码清单 首先来看下布局: <LinearLay

(转)Android与js交互实例(附源码)

本文转载于:http://blog.csdn.net/ithomer/article/details/8737999# Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true Android(Java)与JavaScript(HTML)交互有四种情况: 1) Android(Java)调用HTML中js代码 2) Android(Java)调用HTML中js代码(带参数) 3) HTML中js调用Android(

IOS大图片处理(附源码)

大图片处理 ViewController.m -------------------------------------------------- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //大图片滑动 UIScrollView *scrollView = [[UIScrollView alloc] init]

iOS 中只用3x图片解决方案(附源码)

随着Apple推出了6plus,图片资源成了一大问题,2x-640x960 2x-750x1334 3x-1242x2208,各种规格的图片,安装包必然增大了不少,那么多种类的图片难免会漏掉一些,所以自己写了一个UIImage的Category库,只需要在Bundle中添加3x的图片即可实现6plus使用3x图片,6及以下版本使用2x图片. 话不多说,详情见代码和使用方式 (如果有问题请直接回复,歇歇) // // UIImage+Compress.h // ImageCompress // /

html5+css3实现3D图片(附源码)

(function( $ ) { $.fn.jigsaw = function(options) { var settings = $.extend( {}, $.fn.jigsaw.defaults, options ); $.fn.jigsaw.defaults = settings; //image value in defaults $.fn.jigsaw.defaults.image = this.children("img").attr("src");

Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)

最近反复研究日常经典必用的几个android app,从主界面带来的交互方式入手进行分析,我将其大致分为三类.今天记录第一种方式,即主界面下面有几个tab页,最上端是标题栏,tab页和tab页之间不是通过滑动切换的,而是通过点击切换tab页.早期这种架构一直是使用tabhost+activitygroup来使用,随着fragment的出现及google官方也大力推荐使用fragment,后者大有代替前者之势.本文也使用fragment进行搭建,标题中的"经典"指这种交互经典,非本文的代

.Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码]

原文:.Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码] 经过两天的学习,把常用的组件都学习了一遍,并做成了App 学习可能真没有捷径,跟学习html有点类似,都是一个控件一个控件学习并使用,最后拼凑成一个系统 链接:http://pan.baidu.com/s/1hqefzEW 密码:zbel  最低API 2.3 目标API 4.4 采用Android Studio 0.58IDE 希望给和我同样的初学者带来一些便利,和开发时候可以查询,第一个版本可能比较

Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)

Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载) POSTED ON 2014年6月27日 BY 天边的星星 本文内容: 1.横向ListView的所有实现思路; 2.其中一个最通用的思路HorizontalListView,并基于横向ListView开发一个简单的相册: 3.实现的横向ListView在点击.浏览时item背景会变色,并解决了listview里setSelected造成item的选择状态混乱的问题.

wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)

原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依赖属性也不介绍.),个人认为,依赖属性这个东西,有百分之五十是为了3D而存在.(自己写的类似于demo的东西)先上图,无图无真相这是demo的整个效果图,可以用鼠标移动,触摸屏也可以手指滑动,图片会移动,然后移动结束,会有一个回弹的判断. <Window x:Class="_3Dshow.Wi