انجمن سایت کلیدستان



مشکل در تاچزمان کنونی: ۱۳۹۵/۰۹/۱۳، ۱۰:۰۸ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: salar1298
آخرین ارسال: salar1298
پاسخ 1
بازدید 508

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در تاچ

مشکل در تاچ

#1
سلام  و خسته نباشید خدمت شما مدیر گرامی .
من توی یه برنامه کمیک که ساختم از کد زیر استفاده کردم (برای جابجایی در بین صفحات)
کد پی‌اچ‌پی:
import android.app.Activity;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
public class 
SimpleGestureFilter extends SimpleOnGestureListener{
      
         public final static 
int SWIPE_UP    1;
         public final static 
int SWIPE_DOWN  2;
         public final static 
int SWIPE_LEFT  3;
         public final static 
int SWIPE_RIGHT 4;
          
         public final static 
int MODE_TRANSPARENT 0;
         public final static 
int MODE_SOLID       1;
         public final static 
int MODE_DYNAMIC     2;
          
         private final static 
int ACTION_FAKE = -13//just an unlikely number
         
private int swipe_Min_Distance 400;
         private 
int swipe_Max_Distance 800;
         private 
int swipe_Min_Velocity 30;
      
     private 
int mode             MODE_DYNAMIC;
     private 
boolean running      true;
     private 
boolean tapIndicator false;
      
     private 
Activity context;
     private 
GestureDetector detector;
     private 
SimpleGestureListener listener;
      
     public 
SimpleGestureFilter(Activity context,SimpleGestureListener sgl) {
      
      
this.context context;
      
this.detector = new GestureDetector(contextthis);
      
this.listener sgl;
     }
      
     public 
void onTouchEvent(MotionEvent event){
      
       if(!
this.running)
      return;
      
       
boolean result this.detector.onTouchEvent(event);
      
       if(
this.mode == MODE_SOLID)
        
event.setAction(MotionEvent.ACTION_CANCEL);
       else if (
this.mode == MODE_DYNAMIC) {
      
         if(
event.getAction() == ACTION_FAKE)
           
event.setAction(MotionEvent.ACTION_UP);
         else if (
result)
           
event.setAction(MotionEvent.ACTION_CANCEL);
         else if(
this.tapIndicator){
          
event.setAction(MotionEvent.ACTION_DOWN);
          
this.tapIndicator false;
         }
      
       }
       
//else just do nothing, it's Transparent
     
}
      
     public 
void setMode(int m){
      
this.mode m;
     }
      
     public 
int getMode(){
      return 
this.mode;
     }
      
     public 
void setEnabled(boolean status){
      
this.running status;
     }
      
     public 
void setSwipeMaxDistance(int distance){
      
this.swipe_Max_Distance distance;
     }
      
     public 
void setSwipeMinDistance(int distance){
      
this.swipe_Min_Distance distance;
     }
      
     public 
void setSwipeMinVelocity(int distance){
      
this.swipe_Min_Velocity distance;
     }
      
     public 
int getSwipeMaxDistance(){
      return 
this.swipe_Max_Distance;
     }
      
     public 
int getSwipeMinDistance(){
      return 
this.swipe_Min_Distance;
     }
      
     public 
int getSwipeMinVelocity(){
      return 
this.swipe_Min_Velocity;
     }
      
     @
Override
         
public boolean onFling(MotionEvent e1MotionEvent e2float velocityX,
           
float velocityY) {
          
          final 
float xDistance Math.abs(e1.getX() - e2.getX());
          final 
float yDistance Math.abs(e1.getY() - e2.getY());
          
          if(
xDistance this.swipe_Max_Distance || yDistance this.swipe_Max_Distance)
           return 
false;
          
          
velocityX Math.abs(velocityX);
          
velocityY Math.abs(velocityY);
                
boolean result false;
          
          if(
velocityX this.swipe_Min_Velocity && xDistance this.swipe_Min_Distance){
           if(
e1.getX() > e2.getX()) // right to left
            
this.listener.onSwipe(SWIPE_LEFT);
           else
            
this.listener.onSwipe(SWIPE_RIGHT);
          
           
result true;
          }
          else if(
velocityY this.swipe_Min_Velocity && yDistance this.swipe_Min_Distance){
           if(
e1.getY() > e2.getY()) // bottom to up
            
this.listener.onSwipe(SWIPE_UP);
           else
            
this.listener.onSwipe(SWIPE_DOWN);
          
           
result true;
          }
          
           return 
result;
         }
      
     @
Override
     
public boolean onSingleTapUp(MotionEvent e) {
      
this.tapIndicator true;
      return 
false;
     }
      
     @
Override
     
public boolean onDoubleTap(MotionEvent arg) {
      
this.listener.onDoubleTap();;
      return 
true;
     }
      
     @
Override
     
public boolean onDoubleTapEvent(MotionEvent arg) {
      return 
true;
     }
      
     @
Override
     
public boolean onSingleTapConfirmed(MotionEvent arg) {
      
      if(
this.mode == MODE_DYNAMIC){        // we owe an ACTION_UP, so we fake an
         
arg.setAction(ACTION_FAKE);      //action which will be converted to an ACTION_UP later.
         
this.context.dispatchTouchEvent(arg);
      }
      
      return 
false;
     }
      
        static interface 
SimpleGestureListener{
         
void onSwipe(int direction);
         
void onDoubleTap();
     }
      
    } 
 و برای هر سابجکت از کد زیر
کد پی‌اچ‌پی:
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import ir.rose_soft.feng_shen_ji_001.SimpleGestureFilter.SimpleGestureListener
import android.net.Uri;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
    
   public class 
Subject_1 extends Activity implements SimpleGestureListener{
               private 
SimpleGestureFilter detector;
             
           @
Override
               
public void onCreate(Bundle savedInstanceState) {
                   
super.onCreate(savedInstanceState);
                   
//---hides the title bar---
                   
requestWindowFeature(Window.FEATURE_NO_TITLE); 
                   
setContentView(R.layout.manga_storys);
                    
SharedPreferences shp getSharedPreferences("sett"MODE_PRIVATE);
                   
boolean chbt shp.getBoolean("chk"true); 
                   if (
chbt)
                       
getWindow()
                               .
addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// safhe
                                                                                           // ra
                                                                                           // rushan
                                                                                           // negah
                                                                                           // midarad


                
TouchImageView img = (TouchImageViewfindViewById(R.id.touchImageView);
                
img.setImageResource(R.drawable.p001);
                
img.setMaxZoom(4f);  
                         
          
                   
                   
                   
// Detect touched area
                   
detector = new SimpleGestureFilter(this,this);
           }
             
       @
Override
       
public boolean dispatchTouchEvent(MotionEvent me){
           
// Call onTouchEvent of SimpleGestureFilter class
            
this.detector.onTouchEvent(me);
          return 
super.dispatchTouchEvent(me);
       }
       @
Override
        
public void onSwipe(int direction) {
         
String str "";
         
         switch (
direction) {
         
         case 
SimpleGestureFilter.SWIPE_RIGHT str "شما در صفحه ی اول هستید (^_^)";
                                                  break;
         case 
SimpleGestureFilter.SWIPE_LEFT :  str "2/46";
         
startActivity(new Intent(Subject_1.this,Subject_2.class));
         
finish();
                                                        break;
         case 
SimpleGestureFilter.SWIPE_DOWN :  str "با دو انگشت  به اطراف بکشید";
         break;
case 
SimpleGestureFilter.SWIPE_UP :    str "با دو انگشت  به اطراف بکشید";
         break;
         
         }
          
Toast.makeText(thisstrToast.LENGTH_SHORT).show();
        }
         
        @
Override
        
public void onDoubleTap() {

Toast.makeText(getApplicationContext(), "با دو انگشت  به اطراف بکشید"Toast.LENGTH_SHORT).show();
           
        }

@
Override
public void onBackPressed() {
    
// TODO Auto-generated method stub
    
AlertDialog ad = new AlertDialog.Builder(Subject_1.this)
    .
create();
ad.setTitle(" توجه ");
ad.setMessage(" می خواهید  برگردید ؟ ");
ad.setButton("خیر", new DialogInterface.OnClickListener() {

@
Override
public void onClick(DialogInterface arg0int arg1) {

    
/****************/

    /***************/
}
});
ad.setButton2("بله",new DialogInterface.OnClickListener() {

@
Override
public void onClick(DialogInterface arg0int arg1) {

    
/****************/
    // TODO Auto-generated method stub
          
int RESULT_CLOSE_ALL 0;
            
setResult(RESULT_CLOSE_ALL);
            
finish();

    
/***************/
}
});
 
ad.show();

}

    } 

حالا مشکل من اینکه برنامه دارای حساسیت خوبی به تاچ نیست یعنی صفحه رو یه جورایی به زور عوض می کنه.
حالا سوال اولم اینکه مشکل من کجاست؟
سوال دوم هم اینکه آیا کلاسی بهتر و کاربردی تر از این هم وجود داره تا مثل یه گالری کار کنه با قابلیت زوم و عوض کردن تصویر؟

ممنون میشم راهنماییم کنید

 
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)