日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Android中通過Layout方法來實(shí)現(xiàn)滑動(dòng)

在Android開發(fā)中,經(jīng)常會(huì)遇到一個(gè)view需要它能夠支持滑動(dòng)的需求。今天就來總結(jié)實(shí)現(xiàn)其滑動(dòng)的六種方法。其實(shí)每一種方法的思路都是一樣的,即:監(jiān)聽手勢(shì)觸摸的坐標(biāo)來實(shí)現(xiàn)view坐標(biāo)的變化,從而實(shí)現(xiàn)view的滑動(dòng)效果。

為遵義等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及遵義網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、遵義網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

一、通過Layout方法來實(shí)現(xiàn)滑動(dòng)

如果你將滑動(dòng)后的目標(biāo)位置的坐標(biāo)傳遞給Layout,這樣子就會(huì)把view的位置給重新布置了一下,在視覺上就是view的一個(gè)滑動(dòng)的效果。

這就是利用Layout方法實(shí)現(xiàn)滑動(dòng)的核心思路。我們來看一下代碼:

新建項(xiàng)目,然后自定義一個(gè)view,代碼如下:

package com.example.testdragview;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class DragView extends View{
 
 
 private int lastX;
 private int lastY;
 

 public DragView(Context context, AttributeSet attrs, int defStyleAttr) {
   super(context, attrs, defStyleAttr);
 }

 public DragView(Context context, AttributeSet attrs) {
   super(context, attrs);
 }

 public DragView(Context context) {
   super(context);
 }

 
 
 public boolean onTouchEvent(MotionEvent event) {
   
//    Log.d("付勇焜----->","TouchEvent");
//    Log.d("付勇焜----->",super.onTouchEvent(event)+"");
   
   
   //獲取到手指處的橫坐標(biāo)和縱坐標(biāo)
   int x = (int) event.getX();
   int y = (int) event.getY();
   
   switch(event.getAction())
   {
   case MotionEvent.ACTION_DOWN:
     
     lastX = x;
     lastY = y;
     
     break;
     
   case MotionEvent.ACTION_MOVE:
     
     //計(jì)算移動(dòng)的距離
     int offX = x - lastX;
     int offY = y - lastY;
     //調(diào)用layout方法來重新放置它的位置
     layout(getLeft()+offX, getTop()+offY,
         getRight()+offX  , getBottom()+offY);
   
     break;
   }
   
   return true;
 }
}

核心代碼就是onTouchEvent方法了。代碼很簡(jiǎn)單,無非就是記錄手指的上次坐標(biāo)與下次坐標(biāo),然后將前后移動(dòng)的增量傳遞給layout方法而已。

值得注意的是,onTouchEvent的返回值為true,表示我們要成功消化掉這個(gè)觸摸事件。

然后再修改activity_main.xml的代碼,將這個(gè)view裝到布局里,如下:

 

現(xiàn)在來運(yùn)行程序。效果如下:

效果還可以吧。可以自由的滑動(dòng)了。

其實(shí)上面我們用getX()和getY()獲得的是在視圖坐標(biāo)系中的值。其實(shí)我們也可以使用絕對(duì)坐標(biāo),即使用getRawX()和getRawY()獲得的值

來實(shí)現(xiàn)這個(gè)滑動(dòng)效果。修改DragView中的onTouchEvent中的代碼,如下所示:

1 6 7 11 12

一定注意,此時(shí)不同的是,在move過程中,我們要及時(shí)改變lastX,與lastY的值來獲取正確的之前坐標(biāo)(因?yàn)槭窃贏ndroid坐標(biāo)系嘛,用的是絕對(duì)距離)。

此時(shí)再次運(yùn)行程序,效果跟上圖一樣。


當(dāng)前名稱:Android中通過Layout方法來實(shí)現(xiàn)滑動(dòng)
網(wǎng)頁鏈接:http://www.5511xx.com/article/coicosj.html