在定义的View中绘制了一个矩形,怎么实现可用随意拖动这个矩形呢?
解决方案 »
- phonegap + jquerymbile 输入法输入问题
- Android带权限的操作,怎么判断是否被拒绝或者允许。
- eclipse运行android程序的时候卡在ActivityManager: Starting: Intent
- 一群XX!!整天谈论不实际!有种来解决问题看有几个!!
- android 如何原样显示word文件里面的内容(表格,自选图形,图片,页眉,页脚)
- 在framework中如何去执行一个home key的键功能
- 新手小白求android 动态创建RadioGroup
- android Webview长按选中文本的颜色在哪里修改?
- 点击edittext 弹出输入法,但不能输入,再点击一次者能输入,何解
- android ksoap2 webservices 参数无效
- DDMS中导入导出文件都失败
- android 版本问题
http://blog.csdn.net/ch_984326013/article/details/6654270
package Com.gqs;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class TestView extends View{
private Paint paint;
private Rect r;
private int dx=3;
private int dy=3;
private int upx=10;private int upy=10;
private int downx=100;
private int downy=100;
public TestView(Context context) {
super(context);
paint=new Paint();
r=new Rect(upx,upy,downx,downy);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
Log.i("onDraw","画图");
canvas.drawColor(Color.WHITE);
paint.setColor(Color.BLUE);
paint.setStyle(Style.STROKE);
canvas.drawRect(r, paint);
}
public int getX() {
return upx;
}
public void setX(int x) {
upx = x;
}
public int getY() {
return upy;
}
public void setY(int y) {
upy = y;
}
public int getDownx() {
return downx;
}
public void setDownx(int downx) {
this.downx = downx;
}
public int getDowny() {
return downy;
}
public void setDowny(int downy) {
this.downy = downy;
}
public void update(int dx,int dy)
{
if(r.right+dx<=getWidth()&&r.left+dx>=0&&r.top+dy>=0&&r.bottom+dy<=getHeight())
{
r.offset(dx, dy);
postInvalidate();
}
}
}
package Com.gqs;import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.Toast;/**
*
*@author gqs
*Date:Oct 12, 2011 8:48:08 AM
*/
public class MoveViewActivity extends Activity {
/** Called when the activity is first created. */
TestView tv;
private int x=0;
private int y=0;
private boolean isIn=true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv=new TestView(this);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(tv); tv.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) { int action=event.getAction();
Log.i("action", action+"");
switch(action){
case MotionEvent.ACTION_DOWN:
x=(int)event.getX();
y=(int)event.getY();
if(x>=tv.getX()&&x<=tv.getDownx()&&y>=tv.getY()&&y<=tv.getDowny())
{
Toast.makeText(getApplicationContext(),"在矩形内",Toast.LENGTH_SHORT).show();
isIn=true; }
break;
case MotionEvent.ACTION_MOVE:
if(isIn==true)
{
int mx=(int)event.getX();
int my=(int)event.getY();
Toast.makeText(getApplicationContext(),mx+"",Toast.LENGTH_SHORT).show();
Log.i("mx", my+"");
Log.i("my", my+"");
int dx=mx-x;
int dy=my-y;
tv.update(dx, dy);
x=(int)event.getX();
y=(int)event.getY();
}
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
});
}
}
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.Toast;/**
*
*@author gqs
*Date:Oct 12, 2011 8:48:08 AM
*/
public class MoveViewActivity extends Activity {
/** Called when the activity is first created. */
TestView tv;
private int x=0;
private int y=0;
private boolean isIn=true;
private int lastx;
private int lasty;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv=new TestView(this);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(tv);
tv.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) { int action=event.getAction();
Log.i("action", action+"");
// Log.i("upx", tv.getX()+"");
switch(action){
case MotionEvent.ACTION_DOWN:
x=(int)event.getX();
y=(int)event.getY();
if(x>=tv.Left()&&x<=tv.right()&&y>=tv.top()&&y<=tv.bottom())
{
Toast.makeText(getApplicationContext(),"在矩形内",Toast.LENGTH_SHORT).show();
isIn=true; }
break;
case MotionEvent.ACTION_MOVE:
if(isIn==true)
{
int mx=(int)event.getX();
int my=(int)event.getY();
// Toast.makeText(getApplicationContext(),mx+"",Toast.LENGTH_SHORT).show();
Log.i("mx", my+"");
Log.i("my", my+"");
int dx=mx-lastx;
int dy=my-lasty;
tv.update(dx, dy);
lastx=(int)event.getX();
lasty=(int)event.getY();
}
break;
case MotionEvent.ACTION_UP:
isIn=false;
break;
}
return true;
}
});
}
}package Com.gqs;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class TestView extends View{
private Paint paint;
private Rect r;
private int upx=10;
private int upy=10;
private int downx=100;
private int downy=100;
public TestView(Context context) {
super(context);
paint=new Paint();
r=new Rect(upx,upy,downx,downy);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
Log.i("onDraw","画图");
canvas.drawColor(Color.WHITE);
paint.setColor(Color.BLUE);
paint.setStyle(Style.STROKE);
canvas.drawRect(r, paint);
} public int Left()
{
return r.left;
}
public int right()
{
return r.right;
}
public int top()
{
return r.top;
}
public int bottom()
{
return r.bottom;
}
public void update(int dx,int dy)
{
if(r.right+dx<=getWidth()&&r.left+dx>=0&&r.top+dy>=0&&r.bottom+dy<=getHeight())
{
r.offset(dx, dy);
postInvalidate(); }
}
}
这就对了,下午又试了试 ,那个有问题