آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

touch listener

eskafi_appmanix  12 سال پیش  12 سال پیش
0 0

 

 public class MainActivityy extends Activity {  
	  

	

	@Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 

        getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
        permisions=new ArrayList<Boolean>();
        ControlApplication myApplication = (ControlApplication) this.getApplicationContext();
        db= myApplication.getDatabaseAdapter();

        first=true;
       
        lefts=new int[11];
        tops=new int[11];
  
        point=new Point();
       
        positions=new ArrayList<Feilds_position>();
        
        //==================calculate width and height display in pixle
        DisplayMetrics displayMetrics = getApplicationContext().getResources().getDisplayMetrics();

        int dpHeight = (int) (displayMetrics.heightPixels / displayMetrics.density);
        int dpWidth = (int) (displayMetrics.widthPixels / displayMetrics.density);
        
         display = getWindowManager().getDefaultDisplay(); 
         width = display.getWidth();  // deprecated
         height = display.getHeight(); 
         centerOfwidth=width/2;
         centerOfheight=dpHeight/2;
        //===================
         orientation=getApplicationContext().getResources().getConfiguration().orientation;
         if(orientation==1)
         {
        	 w=dpWidth/7;
         }else
         {
        	 w=dpHeight/7;
         }

        //=========================
         widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST);
         heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
        //==============================
        //************
         
        RelativeLayout.LayoutParams relativeLayoutParams;
 		LinearLayout.LayoutParams linearLayoutParams;
 		
 		LinearLayout linLayout_base = new LinearLayout(this);
 		linLayout_base.setOrientation(LinearLayout.VERTICAL);
 		linLayout_base.setBackgroundColor(getResources().getColor(R.color.bg));

          mLayoutGroup = new AbsoluteLayout(this); 
          layoutParams = new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.MATCH_PARENT,AbsoluteLayout.LayoutParams.MATCH_PARENT, 0, 0);

         linLayout_base.addView(mLayoutGroup,layoutParams);

         
         overridePendingTransition(R.anim.pull_in_from_left, R.anim.hold); 
         LayoutParams linLayoutParam = new LayoutParams(width , height);
         setContentView(linLayout_base, linLayoutParam);

        

      
        btn_reminder= new Button(this);  
        btn_reminder.setText(R.string.reminder);
        btn_reminder.setId(0);
        btn_reminder.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.size20));       
        btn_reminder.measure(widthMeasureSpec, heightMeasureSpec);
        widthOfText=btn_reminder.getMeasuredWidth();       
        btn_reminder.setTextColor(getResources().getColor(R.color.textmenu));       

        point.x=centerOfwidth+70;
        point.y=190;

		btn_reminder.setBackgroundResource(R.drawable.btn_round_color8);		
        loadSavedPreferences(btn_reminder); 
 
        btn_reminder.setOnClickListener(new View.OnClickListener() {
    		
    		@Override
    		public void onClick(View v) {}
		}); 
        btn_reminder.setOnTouchListener(touchListener);
	

      
     
        btn_news= new Button(this);   
        btn_news.setText(getResources().getString(R.string.news)); 
        btn_news.setId(9);
       // btn_news.setBackgroundResource(R.drawable.btn_round_color2);
        btn_news.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.size20));
        btn_news.setTextColor(getResources().getColor(R.color.textmenu));
        
        btn_news.measure(widthMeasureSpec, heightMeasureSpec);
        widthOfText=btn_news.getMeasuredWidth();        
       // point=random_place(width,height);
        point.x=centerOfwidth-150;
        point.y=290;

		btn_news.setBackgroundResource(R.drawable.btn_round_color1);
        loadSavedPreferences(btn_news); 
	 
       btn_news.setOnClickListener(new View.OnClickListener() {
   		
   		@Override
   		public void onClick(View v) {}
		});
        btn_news.setOnTouchListener(touchListener);  
        
      	
        
    
      } 
	
	

  OnTouchListener touchListener = new OnTouchListener()  
    {  
       int temp[]= new int[]{0, 0};  
        public boolean onTouch(final View arg0, MotionEvent arg1) {  
            // TODO Auto-generated method stub  
        	if(editable)
        	{
        		
            int eventAction = arg1.getAction();   
              
            int x = (int)arg1.getRawX();  
            int y = (int)arg1.getRawY();  
              
            switch (eventAction) {  
            case MotionEvent.ACTION_DOWN:  

                temp[0] = (int)arg1.getX();  
                temp[1] = (int)(y-arg0.getTop());     
                  
                mLayoutGroup.bringChildToFront(arg0); 
                arg0.postInvalidate();

                break;  
            case MotionEvent.ACTION_MOVE:  
                  
                 left = x - temp[0];  
                 top = y - temp[1];  
                 right = left + arg0.getWidth();  
                 bottom = top + arg0.getHeight();  
                 
                 if (right > width) {
                	 left=width-arg0.getWidth(); 
                	 right = width;
                	  
                 }
	             if (bottom > height) {
	            	  top=height-arg0.getHeight();
	            	  bottom = height;
	             }
	             if (left<0)
	             {
	            	 left=0;
	            	 right=arg0.getWidth(); 
	             }
	             if (top < 0) {
	            	  bottom=arg0.getHeight();
	            	  top = 0;
	             }
              
                arg0.layout(left, top, right, bottom); 
                arg0.postInvalidate();  

                break;  
  
            
            case MotionEvent.ACTION_UP:
            	
            	if(orientation==1)
            	{
            		savePreferencesLeft_port(arg0.getId(),arg0.getLeft());
            		savePreferencesTop_port(arg0.getId(),arg0.getTop());
            	}else
            	{
            		savePreferencesLeft_land(arg0.getId(),arg0.getLeft());
            		savePreferencesTop_land(arg0.getId(),arg0.getTop());
            	}

            	   
            	   break;
            default:  
                break; 
            }  
               }
        	if(editable)
        		return true; 
        	else
        		return false;
        } 
        
    }; 

    private void loadSavedPreferences(View view) {
    	if(orientation==1)
    	{
    		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
			layoutParams = new AbsoluteLayout.LayoutParams(widthOfText+w, widthOfText+w, sp.getInt("left_port"+view.getId(), point.x), sp.getInt("top_port"+view.getId(), point.y));  

    	}else
    	{
    		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
			layoutParams = new AbsoluteLayout.LayoutParams(widthOfText+w, widthOfText+w, sp.getInt("left_land"+view.getId(), point.x), sp.getInt("top_land"+view.getId(), point.y));
    	}

		 mLayoutGroup.addView(view, layoutParams);
	}

	private void savePreferencesLeft_port(int id,int value) {
		
		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
		Editor edit = sp.edit();
		edit.putInt("left_port"+String.valueOf(id), value);
		edit.commit();
	}
	private void savePreferencesLeft_land(int id,int value) {
		
		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
		Editor edit = sp.edit();
		edit.putInt("left_land"+String.valueOf(id), value);
		edit.commit();
	}
	private void savePreferencesTop_port(int id,int value) {
		SharedPreferences sp = PreferenceManager
				.getDefaultSharedPreferences(this);
		Editor edit = sp.edit();
		edit.putInt("top_port"+String.valueOf(id), value);
		edit.commit();
	}
	private void savePreferencesTop_land(int id,int value) {
		SharedPreferences sp = PreferenceManager
				.getDefaultSharedPreferences(this);
		Editor edit = sp.edit();
		edit.putInt("top_land"+String.valueOf(id), value);
		edit.commit();
	}

	
} 

من صفحه ای را طراحی کرده ام که شامل چند دکمه از نوع Button است،این دکمه ها با انتخاب" دکمه ویرایش " قابل جابجایی و touch هستند در غیر اینصورت قابل کلیک شدن می باشند .موقعیت هر دکمه پس از جابجایی توسط Share preference ذخیره می شود و در دفعات بعدی در همان موقعیت تغییر یافته در دفعه قبل می باشد. 

من صفحه ام را کلا بدون Xml و در قسمت کد جاوا طراحی و از Absulote layout استفاده کرده ام. 

کا ر من در گوشی هایی با ورژن اندروید 4.3 و مدل های پایین تر به خوبی کار می کند.اما حالا که در یک گوشی با ورژن اندروید 4.4 آن را امتحان می کنم ،می بینم با touch هر دکمه, موقعیت دکمه قبلی که آن را جابجا کرده بودم به جای اول خود بازمیگردد. 

جالب اینجاست که وقتی از صفحه خارج شده و دوباره برمیگردم ،چون موقعیت ها را از Share preference می خواند، درست است،اما زمان Touch این پرش وجود دارد. 

لطف می کنید اگر کمک کنید تا من مشکل کارم را پیدا کرده و آن را حل کنم

 

0 0
دوست عزیز شما خط هفتم برنامتون رو اصلاح کنید درست میشه. الان همین انتظار رو از ما دارید دیگه. پیشگویی؟ (12 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .