Android-鼠标点击拖拽感应

目标效果:

   Android-鼠标点击拖拽感应_第1张图片

当鼠标按下左键在模拟器中移动,可以让图片跟着鼠标移动。


1.将activity_main.xml页面布局定义为FrameLayout帧布局,帧布局的特点就是控件默认位置都是在左上角。

activity_main.xml页面:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
</FrameLayout>

2.新建类MovebleView.java,自定义可移动控件。

MovebleView.java页面:

package com.example.kongjian;

import com.example.shubiao.R;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

public class MovebleView extends View{   //基本的控件都是View的子类,所以继承View父类,View父类中没有无参构造方法
	private float x;
	private float y;
	public float getX() {
		return x;
	}
	public void setX(float x) {
		this.x = x;
	}
	public float getY() {
		return y;
	}
	public void setY(float y) {
		this.y = y;
	}
	public MovebleView(Context context) {     //初始化构造方法
		super(context);
		x=0;        //初始位置
		y=100;
	}
	protected void onDraw(Canvas canvas){     //参数为画布
		super.onDraw(canvas);
		Paint paint=new Paint();       //构建画笔
		Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.flower);     //引入图片资源,第一个参数为包含了图片的资源对象,第二个参数为图片资源的id
		canvas.drawBitmap(bitmap,x,y,paint);
		if(!bitmap.isRecycled()){      //如果图片没有被回收
			bitmap.recycle();          //强行回收图片
		}
	}
}


3.在MainActivity.java页面中定义控件编写移动方法。
MainActivity.java页面:
package com.example.shubiao;

import com.example.kongjian.MovebleView;

import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.app.Activity;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		FrameLayout layoutFrame=(FrameLayout) findViewById(R.id.layout_frame);  //查询容器
		final MovebleView movebleView=new MovebleView(this);      //实例自定义控件
		movebleView.setOnTouchListener(new OnTouchListener() {    //匿名内部类,控件的触摸方法
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {   //触摸方法,第二个参数为移动事件
				movebleView.setX(event.getX());        //修改坐标通过event获取鼠标的坐标值并赋值成自定义控件的坐标值
				movebleView.setY(event.getY());
				movebleView.invalidate();              //修改坐标后重新绘制图片
				return true;
			}
		});
		layoutFrame.addView(movebleView);    //将控件添加到FrameLayout容器中
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


4.运行时按住鼠标左键并移动,就可以看到图片跟着鼠标移动了。


你可能感兴趣的:(android,image,Activity)