小弟最近在网上查了一些资料,然后自己写了一个程序,就是当你在屏幕的规定区域长安时会弹出设置壁纸的对话框 ,在模拟器上面可以实现,但是在真机上运行时,不能够实现,接上串口打印信息看到:event.getEventTime()和event.getDownTime()值相等,有哪位大侠能够帮忙给解决一下,或则提供一些长按响应的思路也可以,小弟我搞了两天了还是不能搞定真机上面实现长按的响应....
小弟的代码如下:
package com.sampleactivity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class SampleActivity extends Activity {
private static final int REQUEST_PICK_WALLPAPER = 10;
public static int screenWidth = 0;
public static int screenHeight = 0;
static boolean mIsLongPressed;
/** Called when the activity is first created. */
/* public void onCreate1(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Gallery g=(Gallery)findViewById(R.id.Gallery01);
g.setAdapter(new ImageAdapter(this));
//g.setBackgroundColor(R.drawable.taikong);
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,View v,int position,long id)
{
Toast.makeText(SampleActivity.this, "你选择了"+(position+1)+"号图片",
Toast.LENGTH_LONG).show();
}
});
}
/** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
screenWidth = displayMetrics.widthPixels;
screenHeight = displayMetrics.heightPixels;
Log.d("mainActivity","displayMetrics.widthPixels is: " + screenWidth);
Log.d("mainActivity","displayMetrics.heightPixels is: " + screenHeight);
final CoverFlow cf = new CoverFlow(this);
cf.setAdapter(new ImageAdapter(this));
ImageAdapter imageAdapter = new ImageAdapter(this);
cf.setAdapter(imageAdapter);
cf.setAnimationDuration(1500);
setContentView(cf);
cf.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,View v,int position,long id)
{
Toast.makeText(SampleActivity.this, "你选择了"+(position+1)+"号图片",
Toast.LENGTH_LONG).show();
}
});
} private boolean isLongPressed(float lastX,float lastY,float thisX,float thisY,long lastDownTime,long thisEventTime,long longPressTime)
{
float offsetX = Math.abs(thisX - lastX);
float offsetY = Math.abs(thisY - lastY);
long intervalTime = Math.abs(thisEventTime - lastDownTime);
if( offsetX <=10 && offsetY<=10 && intervalTime >= longPressTime)
{
return true;
}
return false;
}
public boolean onTouchEvent(MotionEvent event)
{
float x=event.getX();
float y=event.getY();
Rect btnRect1 = new Rect(0, 0, screenWidth , screenHeight/4);
Rect btnRect2 = new Rect(0, 3*screenHeight/4, screenWidth ,screenHeight);
float lastx=event.getX();
float lasty=event.getY();
long lastDownTime = event.getEventTime();
Log.d("lastDownTime" ,"********lastDownTime is :"+lastDownTime);
mIsLongPressed=false;
Log.d("Touchevent","mIsLongPressed=false*************");
if(btnRect1.contains((int)x,(int)y)||btnRect2.contains((int)x,(int)y))
{
Log.d("Touchevent","enentoutView3333333333333333333333333*************");
if(MotionEvent.ACTION_UP == event.getAction())
{
Log.d("Touchevent","Excute to this 3333333222222222*************");
float thisx=event.getX();
float thisy=event.getY();
long thisDownTime=event.getEventTime();
Log.d("thisDownTime" ,"thisDownTime is :"+thisDownTime+"actiondowntime = "+event.getDownTime());
// long thisDownTime2=event.getDownTime();
// Log.d("thisDownTime" ,"thisDownTime is :"+thisDownTime2);
Log.d("Touchevent","mIsLongPressed="+mIsLongPressed);
if(!mIsLongPressed)
{
mIsLongPressed = isLongPressed(lastx, lasty, thisx, thisy, lastDownTime,thisDownTime,500);
Log.d("lastDownTime" ,"mIsLongPressed ="+mIsLongPressed);
}
if(mIsLongPressed)
{
Log.d("ActivityMain","onLongClick111111111*************");
final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
Intent chooser = Intent.createChooser(pickWallpaper,
getText(R.string.select_wallpaper));
startActivityForResult(chooser, REQUEST_PICK_WALLPAPER);
}
}
}
return true;
}
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
//产生相框之类的
// TypedArray a = obtainStyledAttributes(R.styleable.Gallery);
// mGalleryItemBackground = a.getResourceId
// (R.styleable.Gallery_android_galleryItemBackground, 10);
// a.recycle();
}
/*返回图像总数*/
public int getCount() {
return mImageIds.length;
} public Object getItem(int position) {
return position;
} public long getItemId(int position) {
return position;
} public View getView(int position, View convertView, ViewGroup parent) {
ReflectionImage i = new ReflectionImage(mContext); if (convertView == null) {
// 返回具体位置的ImageView对象
/*设置当前图像的图像(position为当前图像列表的位置)*/
i.setImageResource(mImageIds[position]);
/* 设置这个ImageView对象的宽高,单位为dip */
i.setLayoutParams(new CoverFlow.LayoutParams(200, 300));
/*声明图片应该向中心剪裁(如果需要的话)*/
// i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
/*定义补距,如果图片有不同的横纵比,小的补距将导致更多的剪裁以适合设置的ImageView的高度和宽度*/
//i.setPadding(8, 8, 8, 8);
i.setBackgroundResource(mGalleryItemBackground);
/*设置Gallery组件的背景风格*/
BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
drawable.setAntiAlias(true);
} else {
i = (ReflectionImage) convertView;
}
return i;
}
private Integer[] mImageIds = {R.drawable.img1, R.drawable.img2, R.drawable.img3,R.drawable.img4,
R.drawable.img5, R.drawable.img6, R.drawable.img7, R.drawable.img8};
public float getScale(boolean focused, int offset) {
return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));
}
}
}
小弟的代码如下:
package com.sampleactivity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class SampleActivity extends Activity {
private static final int REQUEST_PICK_WALLPAPER = 10;
public static int screenWidth = 0;
public static int screenHeight = 0;
static boolean mIsLongPressed;
/** Called when the activity is first created. */
/* public void onCreate1(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Gallery g=(Gallery)findViewById(R.id.Gallery01);
g.setAdapter(new ImageAdapter(this));
//g.setBackgroundColor(R.drawable.taikong);
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,View v,int position,long id)
{
Toast.makeText(SampleActivity.this, "你选择了"+(position+1)+"号图片",
Toast.LENGTH_LONG).show();
}
});
}
/** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
screenWidth = displayMetrics.widthPixels;
screenHeight = displayMetrics.heightPixels;
Log.d("mainActivity","displayMetrics.widthPixels is: " + screenWidth);
Log.d("mainActivity","displayMetrics.heightPixels is: " + screenHeight);
final CoverFlow cf = new CoverFlow(this);
cf.setAdapter(new ImageAdapter(this));
ImageAdapter imageAdapter = new ImageAdapter(this);
cf.setAdapter(imageAdapter);
cf.setAnimationDuration(1500);
setContentView(cf);
cf.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,View v,int position,long id)
{
Toast.makeText(SampleActivity.this, "你选择了"+(position+1)+"号图片",
Toast.LENGTH_LONG).show();
}
});
} private boolean isLongPressed(float lastX,float lastY,float thisX,float thisY,long lastDownTime,long thisEventTime,long longPressTime)
{
float offsetX = Math.abs(thisX - lastX);
float offsetY = Math.abs(thisY - lastY);
long intervalTime = Math.abs(thisEventTime - lastDownTime);
if( offsetX <=10 && offsetY<=10 && intervalTime >= longPressTime)
{
return true;
}
return false;
}
public boolean onTouchEvent(MotionEvent event)
{
float x=event.getX();
float y=event.getY();
Rect btnRect1 = new Rect(0, 0, screenWidth , screenHeight/4);
Rect btnRect2 = new Rect(0, 3*screenHeight/4, screenWidth ,screenHeight);
float lastx=event.getX();
float lasty=event.getY();
long lastDownTime = event.getEventTime();
Log.d("lastDownTime" ,"********lastDownTime is :"+lastDownTime);
mIsLongPressed=false;
Log.d("Touchevent","mIsLongPressed=false*************");
if(btnRect1.contains((int)x,(int)y)||btnRect2.contains((int)x,(int)y))
{
Log.d("Touchevent","enentoutView3333333333333333333333333*************");
if(MotionEvent.ACTION_UP == event.getAction())
{
Log.d("Touchevent","Excute to this 3333333222222222*************");
float thisx=event.getX();
float thisy=event.getY();
long thisDownTime=event.getEventTime();
Log.d("thisDownTime" ,"thisDownTime is :"+thisDownTime+"actiondowntime = "+event.getDownTime());
// long thisDownTime2=event.getDownTime();
// Log.d("thisDownTime" ,"thisDownTime is :"+thisDownTime2);
Log.d("Touchevent","mIsLongPressed="+mIsLongPressed);
if(!mIsLongPressed)
{
mIsLongPressed = isLongPressed(lastx, lasty, thisx, thisy, lastDownTime,thisDownTime,500);
Log.d("lastDownTime" ,"mIsLongPressed ="+mIsLongPressed);
}
if(mIsLongPressed)
{
Log.d("ActivityMain","onLongClick111111111*************");
final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
Intent chooser = Intent.createChooser(pickWallpaper,
getText(R.string.select_wallpaper));
startActivityForResult(chooser, REQUEST_PICK_WALLPAPER);
}
}
}
return true;
}
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
//产生相框之类的
// TypedArray a = obtainStyledAttributes(R.styleable.Gallery);
// mGalleryItemBackground = a.getResourceId
// (R.styleable.Gallery_android_galleryItemBackground, 10);
// a.recycle();
}
/*返回图像总数*/
public int getCount() {
return mImageIds.length;
} public Object getItem(int position) {
return position;
} public long getItemId(int position) {
return position;
} public View getView(int position, View convertView, ViewGroup parent) {
ReflectionImage i = new ReflectionImage(mContext); if (convertView == null) {
// 返回具体位置的ImageView对象
/*设置当前图像的图像(position为当前图像列表的位置)*/
i.setImageResource(mImageIds[position]);
/* 设置这个ImageView对象的宽高,单位为dip */
i.setLayoutParams(new CoverFlow.LayoutParams(200, 300));
/*声明图片应该向中心剪裁(如果需要的话)*/
// i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
/*定义补距,如果图片有不同的横纵比,小的补距将导致更多的剪裁以适合设置的ImageView的高度和宽度*/
//i.setPadding(8, 8, 8, 8);
i.setBackgroundResource(mGalleryItemBackground);
/*设置Gallery组件的背景风格*/
BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
drawable.setAntiAlias(true);
} else {
i = (ReflectionImage) convertView;
}
return i;
}
private Integer[] mImageIds = {R.drawable.img1, R.drawable.img2, R.drawable.img3,R.drawable.img4,
R.drawable.img5, R.drawable.img6, R.drawable.img7, R.drawable.img8};
public float getScale(boolean focused, int offset) {
return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));
}
}
}
public boolean onTouchEvent(MotionEvent event) {
// 获得触摸的坐标
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
// 触摸屏幕时刻
case MotionEvent.ACTION_DOWN:
UpdateTouchEvent(x, y);
break;
// 触摸并移动时刻
case MotionEvent.ACTION_MOVE:
break;
// 终止触摸时刻
case MotionEvent.ACTION_UP:
break;
}
return super.onTouchEvent(event);
}
不过还是谢谢你们能够积极的帮我