PDA

View Full Version : چگونگی دریافت دوبار ضربه پیاپی بر روی یک وب ویو



alireza142
یک شنبه 04 مرداد 1394, 15:32 عصر
با سلام

در یک برنامه آموزشی، می خوام وقتی کاربر 2بار روی وب ویو زد، اون منوی تنظیمات بره پایین ( ناپدید بشه ) . حالا همین مهار دوبار کلیک وب ویو رو موندم چجوریه تا بتونم کد های مخفی شدن نوار تنظیمات رو درش قرار بدم. لطفا کمک کنید دوستان...
کد های اجرای یک فرمان با 2بار کلیک رو در قسمت "این هم کد" دیدم، اما نمیدونم چجوری برای یک وب ویو بکارش بگیرم..
با این کار فقط می خوام اون قسمت سیاه رنگ پایین صفحه (تصویر زیر) از بین بره تا فضای بیشتری برای وب ویو فراهم بشه...


133579

alireza142
دوشنبه 05 مرداد 1394, 13:47 عصر
... up

خیلی ناامید کننده است وقتی می بینی همه سوالات پاسخ داده میشن و این وسط سوال شما غریب و بی پاسخ می مونه...:ناراحت:

از دوستان خواهش می کنم راهنمایی بفرمایید. لینکی ، اشاره ای، کلید واژه ای ، چیزی...
اصلا شدنی هست این کار آیا؟

s3rv3r
دوشنبه 05 مرداد 1394, 18:48 عصر
علتش اینکه که کسی لازم نداشته همچین کاری رو انجام بده. موفق باشی.



public class HelpWebView extends WebView {


private GestureDetector gestureDetector;
private AtomicBoolean mPreventAction = new AtomicBoolean(false);


public HelpWebView(Context context) {
super(context);
gestureDetector = new GestureDetector(context, new GestureListener());
}


public HelpWebView(Context context, AttributeSet attrs) {
super(context, attrs);
gestureDetector = new GestureDetector(context, new GestureListener());
}


public HelpWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
gestureDetector = new GestureDetector(context, new GestureListener());
}


public HelpWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
super(context, attrs, defStyle, privateBrowsing);
gestureDetector = new GestureDetector(context, new GestureListener());
}


@Override
public boolean onTouchEvent(MotionEvent event) {
int index = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int pointId = event.getPointerId(index);


// just use one (first) finger, prevent double tap with two and more fingers
if (pointId == 0){
gestureDetector.onTouchEvent(event);


if (mPreventAction.get()){
mPreventAction.set(false);
return true;
}


return super.onTouchEvent(event);
} else {
return true;
}
}


private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDoubleTap(MotionEvent e) {
mPreventAction.set(true);
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
mPreventAction.set(true);
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// onSingleTapConfirmed will only be called after the detector is confident
// that the user's first tap is not followed by a second tap leading to a double-tap gesture
return false; // it doesn't matter for the return value here as we only check mPreventAction above
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
mPreventAction.set(true); // this is the key! this would block double tap to zoom to fire
return false;
}
}
}

alireza142
سه شنبه 06 مرداد 1394, 11:37 صبح
آقا واقعا ممنون از این لطفت.:تشویق:

فقط می تونی بی زحمت طرز استفاده اش رو هم یه توضیح کوچیکی بفرمایین؟ یعنی کد هایی رو که می خوام با دوبار تاچ پشت سر هم وب ویو، اجرا بشن کجا باید قرار بدم؟

s3rv3r
سه شنبه 06 مرداد 1394, 11:50 صبح
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
mPreventAction.set(true);
return true;
}

alireza142
سه شنبه 06 مرداد 1394, 12:27 عصر
دوست عزیز ممنون از وقتی که برای راهنمایی کردن اونم با این سرعت میذاری.

من کلاس اصلیم که همین وب ویو درش قرار داره، به این صورته :

public class ViewHtml extends Activity
...

حالا این کد های شما رو در یک کلاس جدید ایجاد کردم و در همین کلاس اصلی خودم یک شی ازش ساختم. تا اینجا اصلا کارم درست بوده؟
حالا هرچی می خوام همون متدی که در بالا نوشتید بهش دسترسی پیدا کنم و در یک شرط if قرارش بدم، اصلا شناساییش نمیکنه...

s3rv3r
سه شنبه 06 مرداد 1394, 13:39 عصر
این کلاسی که من گذاشتم خودش از وب ویو extend شده

تو دیزاین اکتیوی که داری به جای استفاده از وب ویو خالی از این استفاده کن

به اصطلاح کاستوم ویجت ساختیم و شما باید تو فایل xml از این استفاده کنی

public class HelpWebView extends WebView

به جای وب ویو عادی از


<com.yourpacket.HelpWebView
android:layou ...
.
.
.
/>

بعد از این کار شما باید از داخل این کلاس به اون لایوت که میخوای مخفی کنی دسترسی پیدا کنی و مخفیش کنی. نه از اکتیویتی به متد این دسترسی داشته باشی

alireza142
سه شنبه 06 مرداد 1394, 22:25 عصر
آقا واقعا ممنون. خیلی مطالب جدیدی یادگرفتم.
با همین راهنمایی شما و استفاده از لینک زیر بالاخره تونستم پیاده سازیش کنم... دمت گرم...:چشمک:


Android Custom Components Example (http://examples.javacodegeeks.com/android/core/ui/component/android-custom-components-example/)