我有一个webview,显示一些html数据,其中包含一些图像和超链接everthing工作正常,当我点击webview中的图像它应该开始一个activity.i找到一种方法来检测图像使用
的网页视图WebView.HitTestResult
通过使用这个我可以检测网页视图中的图像,我把它放在ontouchLisner我得到了图像的检测问题是当我滚动网页视图,如果我不小心移动手指穿过图像活动将启动它是由于ontouchLisner有任何方法来解决这个问题,活动应该只在我点击网页视图中的图像时触发。
我在代码中使用的on touchlisner
wv.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
// TODO Auto-generated method stub
WebView.HitTestResult hr = ((WebView) arg0).getHitTestResult();
switch (arg1.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
if (hr.getType() == 5 || hr.getType() == 8) {
//Detect image in webview
startActivity(new
Intent(MainActivity.this,Other.class));
}
break;
case MotionEvent.ACTION_POINTER_DOWN:
Log.d("-------", "clcik.den");
case MotionEvent.ACTION_POINTER_UP:
Log.d("-------", "clcik.up");
break;
case MotionEvent.ACTION_MOVE:
Log.d("-------", "clcik.movee"+hr.getType());
break;
}
return false;
}
});
答案 0 :(得分:1)
当您在Webview中单击图像时,需要打开上下文菜单。 为此,创建一个自定义webview并覆盖其onCreateContextMenu方法。因此,无论何时触摸图像,它都会打开一个菜单项,然后在该点击上实现您的逻辑。 使用此代码可能会对您有所帮助:
public class CustomWebview extends WebView {
public static final int ID_DO_SOMETHING = 1;
private Context ctx;
public CustomWebview(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.ctx = context;
}
public CustomWebview(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.ctx = context;
}
public CustomWebview(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
this.ctx = context;
}
@Override
protected void onCreateContextMenu(ContextMenu menu) {
super.onCreateContextMenu(menu);
final HitTestResult result = getHitTestResult();
MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
// do the menu action
switch (item.getItemId()) {
case ID_DO_SOMETHING:
// implement your logic here;
break;
default:
break;
}
return true;
}
};
if (result.getType() == HitTestResult.IMAGE_TYPE
|| result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
// Menu options for an image.
// set the header title to the image url
menu.setHeaderTitle(result.getExtra());
menu.add(0, ID_DO_SOMETHING, 0, "Your Method Name").setOnMenuItemClickListener(handler);
}
}
}