Android中怎么實(shí)現(xiàn)view隨觸碰滑動(dòng)效果,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)主營安岳網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶App定制開發(fā),安岳h5小程序定制開發(fā)搭建,安岳網(wǎng)站營銷推廣歡迎安岳等地區(qū)企業(yè)咨詢布局文件里面就是一個(gè)Relativelayout中有一個(gè)ImageView。如下
Java代碼如下,這里考慮了邊緣位置滑動(dòng)的效果。如果考慮,在最左邊緣imageView會(huì)有一半在屏幕之外,在最右邊緣會(huì)縮小,直到看不見。
package com.xingyi.moveviewwithtouch; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; public class MainActivity extends AppCompatActivity { ImageView imageView; RelativeLayout relativeLayout; int heightRL,widthRL; int halfHeight,halfWidth; boolean first=true; private int widthImg; private int heightImg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } //初始化視圖 private void initView() { imageView = (ImageView) findViewById(R.id.imageView); relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout); //獲取滑動(dòng)瞬間位置和點(diǎn)擊瞬間位置,并移動(dòng)imageview relativeLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_MOVE: moveView(imageView, motionEvent.getX(), motionEvent.getY()); break; case MotionEvent.ACTION_DOWN: getWidthAndHeight(); moveView(imageView, motionEvent.getX(), motionEvent.getY()); break; default: break; } return true; } }); } //因?yàn)椴荒茉诔跏蓟晥D時(shí)獲得長寬,而每次計(jì)算一次長寬又影響性能 private void getWidthAndHeight(){ if(first){ widthRL=relativeLayout.getWidth(); heightRL=relativeLayout.getHeight(); widthImg=imageView.getWidth(); heightImg=imageView.getHeight(); halfWidth = imageView.getWidth() / 2;//imageView寬度的一半 halfHeight = imageView.getHeight() / 2;//imageView高度的一半 first=false; } } //滑動(dòng)瞬間,將x和y分別作imageView的中心點(diǎn)到relativeLayout最左和頂端距離 private void moveView(View view, float x, float y) { RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams(); //設(shè)置水平位置 if (x < halfWidth) {//左邊緣 params.leftMargin = 0;//設(shè)置imageview到左端距離為0 } else if (x > widthRL- halfWidth) { params.leftMargin = widthRL-widthImg;//設(shè)置imageview左端到左端端距離(params.rightMargin的性能非常糟糕) } else { params.leftMargin = (int) (x - halfWidth);//imageview左端到relativelayout左端距離 } //設(shè)置豎直位置 if (y < halfHeight) { params.topMargin = 0; } else if (y > heightRL - halfHeight) { params.topMargin = heightRL-widthImg;//params.bottomMargin的性能非常糟糕 } else { params.topMargin = (int) (y - halfHeight); } view.setLayoutParams(params); } }
關(guān)于Android中怎么實(shí)現(xiàn)view隨觸碰滑動(dòng)效果問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。