Android 如何在ViewPager中检测TouchImageView的单次点击?
我制作了一个应用程序,在该应用程序中,我将图像显示在Android 如何在ViewPager中检测TouchImageView的单次点击?,android,touchimageview,Android,Touchimageview,我制作了一个应用程序,在该应用程序中,我将图像显示在viewpager中。我正在使用通用图像加载程序。所有图像都加载良好,我可以放大和缩小,因为我已将TouchImagevIew添加为imageview。现在,当我点击屏幕时,我想显示一些按钮,例如share和delete。我无法检测到单触手势。为什么? 查看页面的代码 public class ImageViewPager extends Activity { // Declare Variable int po
viewpager
中。我正在使用通用
图像加载程序。所有图像都加载良好,我可以放大和缩小,因为我已将TouchImagevIew
添加为imageview
。现在,当我点击屏幕时,我想显示一些按钮,例如share
和delete
。我无法检测到单触手势。为什么?
查看页面的代码
public class ImageViewPager extends Activity {
// Declare Variable
int position;
Button delete, gimmy, done;
ViewPager viewpager;
ImagePagerAdapter pageradapter;
TouchImageView imageView;
TextView text;
Runnable r;
Handler mHandler;
RelativeLayout rel;
GestureDetector gestureDetector;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set title for the ViewPager
setContentView(R.layout.view_pager);
mHandler=new Handler();
delete=(Button) findViewById(R.id.del);
done=(Button) findViewById(R.id.done);
gimmy=(Button) findViewById(R.id.gimmy);
rel=(RelativeLayout)findViewById(R.id.relative);
ActionBar bar = getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
bar.setHomeButtonEnabled(true);
setTitle("ViewPager");
Intent p = getIntent();
position = p.getExtras().getInt("id");
pageradapter = new ImagePagerAdapter(ImageViewPager.this);
viewpager = (ViewPager) findViewById(R.id.pager);
viewpager.setAdapter(pageradapter);
viewpager.setCurrentItem(position);
r=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
delete.setVisibility(View.GONE);
done.setVisibility(View.GONE);
gimmy.setVisibility(View.GONE);
}
};
mHandler.postDelayed(r,5*1000);
done.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent p = new Intent(getApplicationContext(), MainActivity.class);
startActivity(p);
}
});
gimmy.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected (int page)
{
delete.setVisibility(View.GONE);
done.setVisibility(View.GONE);
gimmy.setVisibility(View.GONE);
}
@Override
public void onPageScrolled (int arg0, float arg1, int arg2)
{
}
@Override
public void onPageScrollStateChanged (int arg0)
{
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.home:
finish();
overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent p = new Intent(getApplicationContext(), SlideImages.class);
// p.putExtra("id", pos+1);
startActivity(p);
}
return super.onKeyDown(keyCode, event);
}
}
public class ImagePagerAdapter extends PagerAdapter {
LayoutInflater inflater;
PhotoViewAttacher attacher;
private DisplayImageOptions options;
private List<Wallpaper> IMAGES_LIST=AppController.getInstance().getPrefManger().getAllImages();
public ImagePagerAdapter(Context context)
{
inflater = LayoutInflater.from(context);
options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.resetViewBeforeLoading(true)
.cacheOnDisk(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(300))
.build();
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
View imageLayout = inflater.inflate(R.layout.item_pager_image, container, false);
assert imageLayout != null;
TouchImageView imageView = (TouchImageView) imageLayout.findViewById(R.id.image);
final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
ImageLoader.getInstance().displayImage(IMAGES_LIST.get(position).getUrl(), imageView, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
spinner.setVisibility(View.VISIBLE);
view.setVisibility(View.GONE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
String message = null;
switch (failReason.getType()) {
case IO_ERROR:
message = "Input/Output error";
break;
case DECODING_ERROR:
message = "Image can't be decoded";
break;
case NETWORK_DENIED:
message = "Downloads are denied";
break;
case OUT_OF_MEMORY:
message = "Out Of Memory error";
break;
case UNKNOWN:
message = "Unknown error";
break;
}
Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();
spinner.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
Log.i("RAE", "Loading Completed");
}
});
container.addView(imageLayout, 0);
return imageLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return IMAGES_LIST.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
}
寻呼机适配器的代码
public class ImageViewPager extends Activity {
// Declare Variable
int position;
Button delete, gimmy, done;
ViewPager viewpager;
ImagePagerAdapter pageradapter;
TouchImageView imageView;
TextView text;
Runnable r;
Handler mHandler;
RelativeLayout rel;
GestureDetector gestureDetector;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set title for the ViewPager
setContentView(R.layout.view_pager);
mHandler=new Handler();
delete=(Button) findViewById(R.id.del);
done=(Button) findViewById(R.id.done);
gimmy=(Button) findViewById(R.id.gimmy);
rel=(RelativeLayout)findViewById(R.id.relative);
ActionBar bar = getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
bar.setHomeButtonEnabled(true);
setTitle("ViewPager");
Intent p = getIntent();
position = p.getExtras().getInt("id");
pageradapter = new ImagePagerAdapter(ImageViewPager.this);
viewpager = (ViewPager) findViewById(R.id.pager);
viewpager.setAdapter(pageradapter);
viewpager.setCurrentItem(position);
r=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
delete.setVisibility(View.GONE);
done.setVisibility(View.GONE);
gimmy.setVisibility(View.GONE);
}
};
mHandler.postDelayed(r,5*1000);
done.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent p = new Intent(getApplicationContext(), MainActivity.class);
startActivity(p);
}
});
gimmy.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected (int page)
{
delete.setVisibility(View.GONE);
done.setVisibility(View.GONE);
gimmy.setVisibility(View.GONE);
}
@Override
public void onPageScrolled (int arg0, float arg1, int arg2)
{
}
@Override
public void onPageScrollStateChanged (int arg0)
{
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.home:
finish();
overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent p = new Intent(getApplicationContext(), SlideImages.class);
// p.putExtra("id", pos+1);
startActivity(p);
}
return super.onKeyDown(keyCode, event);
}
}
public class ImagePagerAdapter extends PagerAdapter {
LayoutInflater inflater;
PhotoViewAttacher attacher;
private DisplayImageOptions options;
private List<Wallpaper> IMAGES_LIST=AppController.getInstance().getPrefManger().getAllImages();
public ImagePagerAdapter(Context context)
{
inflater = LayoutInflater.from(context);
options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.resetViewBeforeLoading(true)
.cacheOnDisk(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(300))
.build();
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
View imageLayout = inflater.inflate(R.layout.item_pager_image, container, false);
assert imageLayout != null;
TouchImageView imageView = (TouchImageView) imageLayout.findViewById(R.id.image);
final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
ImageLoader.getInstance().displayImage(IMAGES_LIST.get(position).getUrl(), imageView, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
spinner.setVisibility(View.VISIBLE);
view.setVisibility(View.GONE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
String message = null;
switch (failReason.getType()) {
case IO_ERROR:
message = "Input/Output error";
break;
case DECODING_ERROR:
message = "Image can't be decoded";
break;
case NETWORK_DENIED:
message = "Downloads are denied";
break;
case OUT_OF_MEMORY:
message = "Out Of Memory error";
break;
case UNKNOWN:
message = "Unknown error";
break;
}
Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();
spinner.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
Log.i("RAE", "Loading Completed");
}
});
container.addView(imageLayout, 0);
return imageLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return IMAGES_LIST.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
}
公共类ImagePagerAdapter扩展了PagerAdapter{
充气机;
照相相机;
私有显示图像选项;
私有列表图像\u List=AppController.getInstance().getPrefManger().getAllImages();
公共ImagePagerAdapter(上下文)
{
充气器=充气器。从(上下文);
选项=新建DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_错误)
.ResetViewBefore加载(真)
.cacheOnDisk(真)
.imageScaleType(imageScaleType.Justice)
.bitmapConfig(Bitmap.Config.RGB_565)
.considerExifParams(真)
.显示器(新FadeInBitmapDisplayer(300))
.build();
}
@凌驾
公共对象实例化项(视图组容器,int位置)
{
查看图像布局=充气机。充气(R.layout.item\u pager\u图像,容器,错误);
断言imageLayout!=null;
TouchImageView imageView=(TouchImageView)imageLayout.findViewById(R.id.image);
最终ProgressBar微调器=(ProgressBar)imageLayout.findViewById(R.id.loading);
ImageLoader.getInstance().displayImage(图像列表.get(位置).getUrl(),imageView,选项,新SimpleImageLoadingListener()){
@凌驾
public void onLoadingStarted(字符串imageUri,视图){
spinner.setVisibility(View.VISIBLE);
view.setVisibility(view.GONE);
}
@凌驾
public void onload失败(字符串imageUri、视图视图、失败原因){
字符串消息=null;
开关(failReason.getType()){
案例IO_错误:
message=“输入/输出错误”;
打破
案例解码错误:
message=“图像无法解码”;
打破
案件被驳回:
message=“下载被拒绝”;
打破
大小写输出\u\u内存:
message=“内存不足错误”;
打破
案件未知:
message=“未知错误”;
打破
}
Toast.makeText(view.getContext(),message,Toast.LENGTH_SHORT.show();
spinner.setVisibility(View.GONE);
}
@凌驾
public void onLoadingComplete(字符串imageUri、视图视图、位图加载图像){
spinner.setVisibility(View.GONE);
view.setVisibility(view.VISIBLE);
日志i(“RAE”,“加载完成”);
}
});
container.addView(imageLayout,0);
返回图像布局;
}
@凌驾
公共项(视图组容器、int位置、对象){
container.removeView((视图)对象);
}
@凌驾
public int getCount(){
返回图像_LIST.size();
}
@凌驾
公共布尔值isViewFromObject(视图,对象){
返回视图.equals(对象);
}
@凌驾
公共无效恢复状态(可包裹状态,类装入器){
}
@凌驾
公共包裹存储状态(){
返回null;
}
}
item\u pager\u image.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="1dip">
<info.androidhive.slidingmenu.util.TouchImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:contentDescription="@string/app_name" />
<ProgressBar
android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone" />
</FrameLayout>
我遇到了同样的问题。只需调用单点击确认方法&隐藏或显示您在该方法上的视图&并将寻呼机适配器添加到同一文件中 代码:
public class ImageViewPager extends Activity {
// Declare Variable
int position;
Button delete, gimmy, done;
ViewPager viewpager;
ImagePagerAdapter pageradapter;
TouchImageView imageView;
TextView text;
Runnable r;
Handler mHandler;
RelativeLayout rel;
GestureDetector gestureDetector;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set title for the ViewPager
setContentView(R.layout.view_pager);
mHandler=new Handler();
delete=(Button) findViewById(R.id.del);
done=(Button) findViewById(R.id.done);
gimmy=(Button) findViewById(R.id.gimmy);
rel=(RelativeLayout)findViewById(R.id.relative);
ActionBar bar = getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
bar.setHomeButtonEnabled(true);
setTitle("ViewPager");
Intent p = getIntent();
position = p.getExtras().getInt("id");
pageradapter = new ImagePagerAdapter(ImageViewPager.this);
viewpager = (ViewPager) findViewById(R.id.pager);
viewpager.setAdapter(pageradapter);
viewpager.setCurrentItem(position);
r=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
delete.setVisibility(View.GONE);
done.setVisibility(View.GONE);
gimmy.setVisibility(View.GONE);
}
};
mHandler.postDelayed(r,5*1000);
done.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent p = new Intent(getApplicationContext(), MainActivity.class);
startActivity(p);
}
});
gimmy.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected (int page)
{
delete.setVisibility(View.GONE);
done.setVisibility(View.GONE);
gimmy.setVisibility(View.GONE);
}
@Override
public void onPageScrolled (int arg0, float arg1, int arg2)
{
}
@Override
public void onPageScrollStateChanged (int arg0)
{
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.home:
finish();
overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent p = new Intent(getApplicationContext(), SlideImages.class);
// p.putExtra("id", pos+1);
startActivity(p);
}
return super.onKeyDown(keyCode, event);
}
/**
* This is adapter class for the viuew pager.we have used this in same file baecause reference is lost in another file.
* **/
public class ImagePagerAdapter extends PagerAdapter {
LayoutInflater inflater;
PhotoViewAttacher attacher;
private DisplayImageOptions options;
private List<Wallpaper> IMAGES_LIST=AppController.getInstance().getPrefManger().getAllImages();
public ImagePagerAdapter(Context context)
{
inflater = LayoutInflater.from(context);
options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.resetViewBeforeLoading(true)
.cacheOnDisk(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(300))
.build();
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
View imageLayout = inflater.inflate(R.layout.item_pager_image, container, false);
assert imageLayout != null;
TouchImageView imageView = (TouchImageView) imageLayout.findViewById(R.id.image);
final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
imageView.setOnDoubleTapListener(new OnDoubleTapListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
delete.setVisibility(View.VISIBLE);
done.setVisibility(View.VISIBLE);
gimmy.setVisibility(View.VISIBLE);
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
});
ImageLoader.getInstance().displayImage(IMAGES_LIST.get(position).getUrl(), imageView, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
spinner.setVisibility(View.VISIBLE);
view.setVisibility(View.GONE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
String message = null;
switch (failReason.getType()) {
case IO_ERROR:
message = "Input/Output error";
break;
case DECODING_ERROR:
message = "Image can't be decoded";
break;
case NETWORK_DENIED:
message = "Downloads are denied";
break;
case OUT_OF_MEMORY:
message = "Out Of Memory error";
break;
case UNKNOWN:
message = "Unknown error";
break;
}
Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();
spinner.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
Log.i("RAE", "Loading Completed");
}
});
container.addView(imageLayout, 0);
return imageLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return IMAGES_LIST.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
}
}
公共类ImageViewPager扩展活动{
//声明变量
内部位置;
按钮删除,gimmy,done;
查看页面查看页面;
图像页雷达页雷达;
触摸图像视图;
文本查看文本;
可运行r;
汉德勒;
相对性;
手势检测器;
@SuppressLint(“新API”)
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//设置ViewPager的标题
setContentView(R.layout.view\u页面);
mHandler=新处理程序();
delete=(按钮)findviewbyd(R.id.del);
完成=(按钮)findViewById(R.id.done);
gimmy=(按钮)findviewbyd(R.id.gimmy);
rel=(RelativeLayout)findViewById(R.id.relative);
ActionBar=getActionBar();
bar.setDisplayHomeAsUpEnabled(真);
bar.setHomeButtonEnabled(真);
setTitle(“查看页面”);
Intent p=getIntent();
position=p.getExtras().getInt(“id”);
pageradapter=新的ImagePagerAdapter(ImageViewPager.this);
viewpager=(viewpager)findViewById(R.id.pager);
viewpager.setAdapter(pageradapter);
viewpager.setCurrentItem(位置);
r=新的可运行(){
@凌驾
公开募捐{
//TODO自动生成的方法存根
delete.setVisibility(View.GONE);
完成。设置可见性(View.GONE);
gimmy.setVisibility(View.GONE);
}
};
mHandler.postDelayed(r,5*1000);
完成。setOnClickListener(新的OnClickList