Android实现跟随手指拖动并自动贴边的View样式的实例

 更新时间:2017年1月22日 11:04  点击:1557
Android怎么实现跟随手指拖动并自动贴边的View样式?本文介绍了Android实现跟随手指拖动并自动贴边的View样式的实例,大家有兴趣的可以动手尝试一下给出的实例代码

效果图

代码

 

 代码如下 复制代码

/**

 * 根据手指拖动的当前位置,自动贴边的View

 */

publicclassDragViewextendsImageViewimplementsView.OnTouchListener{

 privateintscreenWidth;

 privateintscreenHeight;

 privateContext mContext;

 privateintlastX, lastY;

 privateintleft ,top;

 privateViewGroup.MarginLayoutParams layoutParams;

 privateintstartX;

 privateintendX;

 privatebooleanisMoved =false;

 privateonDragViewClickListener mLister;

 publicinterfaceonDragViewClickListener{

  voidonDragViewClick();

 }

 publicvoidsetOnDragViewClickListener(onDragViewClickListener listener){

  this.mLister = listener;

 }

 publicDragView(Context context) {

  this(context,null);

 }

 publicDragView(Context context, AttributeSet attrs) {

  super(context, attrs);

  mContext = context;

  DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

  screenWidth = displayMetrics.widthPixels;

  screenHeight = displayMetrics.heightPixels-getStatusBarHeight();

  init();

 }

 publicvoidinit(){

  setOnTouchListener(this);

  post(newRunnable() {

   @Override

   publicvoidrun() {

    layoutParams = (ViewGroup.MarginLayoutParams)getLayoutParams();

    layoutParams.topMargin = screenHeight - getHeight();

    layoutParams.leftMargin = screenWidth - getWidth();

    setLayoutParams(layoutParams);

   }

  });

 }

 @Override

 publicbooleanonTouch(View v, MotionEvent event) {

  switch(event.getAction()) {

   caseMotionEvent.ACTION_DOWN:

    lastX = (int) event.getRawX();

    lastY = (int) event.getRawY();

    startX = lastX;

    break;

   caseMotionEvent.ACTION_MOVE:

    isMoved =true;

    intdx = (int) event.getRawX() - lastX;

    intdy = (int) event.getRawY() - lastY;

    left = v.getLeft() + dx;

    top = v.getTop() + dy;

    intright = v.getRight() + dx;

    intbottom = v.getBottom() + dy;

    // 设置不能出界

    if(left <0) {

     left =0;

     right = left + v.getWidth();

    }

    if(right > screenWidth) {

     right = screenWidth;

     left = right - v.getWidth();

    }

    if(top <0) {

     top =0;

     bottom = top + v.getHeight();

    }

    if(bottom > screenHeight) {

     bottom = screenHeight;

     top = bottom - v.getHeight();

    }

    v.layout(left, top, right, bottom );

    lastX = (int) event.getRawX();

    lastY = (int) event.getRawY();

    break;

   caseMotionEvent.ACTION_UP:

    //只有滑动改变上边距时,抬起才进行设置

    if(isMoved) {

     layoutParams = (ViewGroup.MarginLayoutParams)getLayoutParams();

     layoutParams.topMargin = top;

     setLayoutParams(layoutParams);

    }

    endX = (int) event.getRawX();

    //滑动距离比较小,当作点击事件处理

    if(Math.abs(startX - endX) <6) {

     returnfalse;

    }

    if(left +v.getWidth()/2< screenWidth/2) {

     startScroll(left,screenWidth/2,true);

    }else{

     startScroll(left,screenWidth/2,false);

    }

    break;

  }

  returntrue;

}

 //在此处理点击事件

 @Override

 publicbooleanonTouchEvent(MotionEvent event) {

  mLister.onDragViewClick();

  returnsuper.onTouchEvent(event);

 }

 publicvoidstartScroll(finalintstart,intend,finalbooleanisLeft){

  ValueAnimator valueAnimator = ValueAnimator.ofFloat(start,end).setDuration(800);

  valueAnimator.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {

   @Override

   publicvoidonAnimationUpdate(ValueAnimator animation) {

    if(isLeft) {

     layoutParams.leftMargin = (int) (start*(1-animation.getAnimatedFraction()));

    }else{

     layoutParams.leftMargin = (int) (start + (screenWidth - start - getWidth())*(animation.getAnimatedFraction()));

    }

    setLayoutParams(layoutParams);

   }

  });

  valueAnimator.start();

 }

 /**

  * 获取状态栏的高度

  * @return 状态栏高度

  */

 publicintgetStatusBarHeight() {

  intresult =0;

  intresourceId = getResources().getIdentifier("status_bar_height","dimen","android");

  if(resourceId >0) {

   result = getResources().getDimensionPixelSize(resourceId);

  }

  returnresult;

 }

}

 

本篇文章介绍的是oppo r9s如何设置和取消图形解锁的方法,有需要的小伙伴快来看一看吧。

问:oppo r9s怎么设置和取消图形解锁?

答:很多朋友都喜欢设置图形解锁,但是不知道怎么设置也不知道怎么取消,简单来讲一下。请进入设置---锁屏密码---划开进入后---选择无。这样以后就不会出现图形解锁了,如果想再把图形解锁弄回来也是按照这个步骤。(oppo  r9s手机专题)

oppo r9s怎么设置和取消图形解锁 三联

Android党都应该玩过一个叫吹裙子的游戏,就是需要一直监听用户的语音输入。这篇文章介绍了Android使用AudioRecord判断是否有音频输入的教程,有需要的同学可以参考一下本文

Android党都应该玩过一个叫吹裙子的游戏,这个游戏就是原理就是通过监听用户吹出的气的力度来决定如何把MM的裙子弄飞起来的,所以关键在于如何判断用户吹气的力度问题。现在公司刚好有这个需求要评估就是需要一直监听用户的语音输入,当在两秒内没有语音输入时候就暂停某项事情,有语音输入的时候就要继续做某件事。其实这两件事情的本质原理是一样的,就是通过这AudioRecord来处理用户输入的原始音频数据,从而计算出当前用户输入的音量大小来判断用户是否有语音输入。下面贴上一段代码用户可以自行研究。

 

 代码如下复制代码

publicstaticintcalculateVolume(byte[] var0,intvar1) {

    int[] var3 =null;

    intvar4 = var0.length;

    intvar2;

    if(var1 ==8) {

      var3 =newint[var4];

      for(var2 =0; var2 < var4; ++var2) {

        var3[var2] = var0[var2];

      }

    }elseif(var1 ==16) {

      var3 =newint[var4 /2];

      for(var2 =0; var2 < var4 /2; ++var2) {

        bytevar5 = var0[var2 *2];

        bytevar6 = var0[var2 *2+1];

        intvar13;

        if(var5<0) {

          var13 = var5 +256;

        }else{

          var13 = var5;

        }

        shortvar7 = (short)(var13 +0);

        if(var6<0) {

          var13 = var6 +256;

        }else{

          var13 = var6;

        }

        var3[var2] = (short)(var7 + (var13 <<8));

      }

    }

    int[] var8 = var3;

    if(var3 !=null&& var3.length !=0) {

      floatvar10 =0.0F;

      for(intvar11 =0; var11 < var8.length; ++var11) {

        var10 += (float)(var8[var11] * var8[var11]);

      }

      var10 /= (float)var8.length;

      floatvar12 =0.0F;

      for(var4 =0; var4 < var8.length; ++var4) {

        var12 += (float)var8[var4];

      }

      var12 /= (float)var8.length;

      var4 = (int)(Math.pow(2.0D, (double)(var1 -1)) -1.0D);

      doublevar14 = Math.sqrt((double)(var10 - var12 * var12));

      intvar9;

      if((var9 = (int)(10.0D * Math.log10(var14 *10.0D * Math.sqrt(2.0D) / (double)var4 +1.0D)))<0) {

        var9 =0;

      }

      if(var9 >10) {

        var9 =10;

      }

      returnvar9;

    }else{

      return0;

    }

}

 

上述方法的形参中的一个字节数组便是当前捕捉到用户输入的原始音频数据,第二个形参则是音频数据格式位PCM,16位每个样本,比如如果音频数据格式设为AudioFormat.ENCODING_PCM_16BIT,则参数传16。最后实现的效果就是如下:

01-12 18:54:17.222 E/recordtest(24249): no voice input
…………….
01-12 18:54:19.027 E/recordtest(24249): no voice input
01-12 18:54:19.067 E/recordtest(24249): no voice input
01-12 18:54:19.105 E/recordtest(24249): no voice input
01-12 18:54:19.145 E/recordtest(24249): no voice input
01-12 18:54:19.188 E/recordtest(24249): no voice input
01-12 18:54:19.227 E/recordtest(24249): no voice input
01-12 18:54:19.228 E/recordtest(24249): no voice input in 2 sec
01-12 18:54:19.269 E/recordtest(24249): no voice input
01-12 18:54:19.306 E/recordtest(24249): no voice input
01-12 18:54:19.345 E/recordtest(24249): no voice input
01-12 18:54:19.387 E/recordtest(24249): no voice input
01-12 18:54:19.427 E/recordtest(24249): no voice input
01-12 18:54:19.466 E/recordtest(24249): has voice input
01-12 18:54:19.505 E/recordtest(24249): has voice input
01-12 18:54:19.546 E/recordtest(24249): has voice input
01-12 18:54:19.586 E/recordtest(24249): has voice input
01-12 18:54:19.646 E/recordtest(24249): has voice input
01-12 18:54:19.686 E/recordtest(24249): has voice input
01-12 18:54:19.726 E/recordtest(24249): has voice input
01-12 18:54:19.766 E/recordtest(24249): has voice input

这篇文章介绍了Android中RecyclerView上拉下拉,分割线,多条目的实例代码,非常具有参考价值,有需要的朋友可以参考一下

 

 代码如下复制代码

//activity的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:id="@+id/activity_main"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  tools:context="baway.com.cj.myrecyclerview2.MainActivity">

  <android.support.v4.widget.SwipeRefreshLayout

    android:id="@+id/swipeRefreshLayout"

    android:layout_width="match_parent"

    android:layout_above="@+id/progress"

    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView

      android:id="@+id/recyclerView"

      android:layout_width="match_parent"

      android:layout_height="match_parent">

    

  

  <ProgressBar

    android:id="@+id/progress"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_centerHorizontal="true"

    android:visibility="gone"

    android:layout_alignParentBottom="true"/>

item1的xml和item2的xml就一个背景颜色不同

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:id="@+id/activity_main"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:background="#f00000"

  tools:context="baway.com.cj.myrecyclerview2.MainActivity">

  <TextView

    android:id="@+id/name"

    android:layout_width="match_parent"

    android:layout_height="50dp"

    android:textSize="20sp"

    android:gravity="center"

    android:textColor="#00ff00"/>

item2

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:id="@+id/activity_main"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:background="#f000ff"

  tools:context="baway.com.cj.myrecyclerview2.MainActivity">

  <TextView

    android:id="@+id/name"

    android:layout_width="match_parent"

    android:layout_height="50dp"

    android:textSize="20sp"

    android:gravity="center"

    android:textColor="#00ff00"/>

//activity,有上啦下拉,添加分割线,

packagebaway.com.cj.myrecyclerview2;

importandroid.graphics.Color;

importandroid.os.Handler;

importandroid.support.v4.widget.SwipeRefreshLayout;

importandroid.support.v7.app.AppCompatActivity;

importandroid.os.Bundle;

importandroid.support.v7.widget.DefaultItemAnimator;

importandroid.support.v7.widget.LinearLayoutManager;

importandroid.support.v7.widget.RecyclerView;

importandroid.util.Log;

importandroid.view.View;

importandroid.widget.ProgressBar;

importandroid.widget.Toast;

importjava.util.ArrayList;

publicclassMainActivityextendsAppCompatActivity {

  privateRecyclerView recyclerView;

  privateMainAdapter mainAdapter;

  privateSwipeRefreshLayout swipeRefreshLayout;

  privateLinearLayoutManager linearLayoutManager;

  privateProgressBar progress;

  @Override

  protectedvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    initView();

    initData();

  }

  privatevoidinitView() {

    recyclerView = (RecyclerView)findViewById(R.id.recyclerView);

    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);

    progress = (ProgressBar)findViewById(R.id.progress);

    linearLayoutManager =newLinearLayoutManager(this);

    recyclerView.setLayoutManager(linearLayoutManager);

    mainAdapter =newMainAdapter(this);

    mainAdapter.setOnClickListener(newMyItemOnClickListener() {

      @Override

      publicvoidonItemClick(View view,intposition) {

        Toast.makeText(MainActivity.this," "+position, Toast.LENGTH_SHORT).show();

      }

    });

    recyclerView.setAdapter(mainAdapter);

    recyclerView.addItemDecoration(newMyItemDecoration());

    recyclerView.setItemAnimator(newDefaultItemAnimator());

    swipeRefreshLayout.setColorSchemeColors(Color.RED,Color.GREEN,Color.BLUE);

    swipeRefreshLayout.setProgressViewOffset(true,0,200);

    swipeRefreshLayout.setOnRefreshListener(newSwipeRefreshLayout.OnRefreshListener() {

      @Override

      publicvoidonRefresh() {

        newHandler().postDelayed(newRunnable() {

          @Override

          publicvoidrun() {

            swipeRefreshLayout.setRefreshing(false);

          }

        },3000);

      }

    });

    recyclerView.addOnScrollListener(newRecyclerView.OnScrollListener() {

      @Override

      publicvoidonScrolled(RecyclerView recyclerView,intdx,intdy) {

        super.onScrolled(recyclerView, dx, dy);

        intlastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();

        intitemCount = linearLayoutManager.getItemCount();

        if(lastVisibleItemPosition +1>= itemCount && dy >0) {

          progress.setVisibility(View.VISIBLE);

          newHandler().postDelayed(newRunnable() {

            @Override

            publicvoidrun() {

              progress.setVisibility(View.GONE);

            }

          },3000);

        }

      }

      @Override

      publicvoidonScrollStateChanged(RecyclerView recyclerView,intnewState) {

        super.onScrollStateChanged(recyclerView, newState);

      }

    });

  }

  privatevoidinitData() {

    ArrayListstrings =newArrayList<>();

    for(inti =0; i<50; i++) {

      strings.add("name "+i);

    }

    mainAdapter.setData(strings);

    mainAdapter.notifyDataSetChanged();

  }

}

//adpter有多条目展示

packagebaway.com.cj.myrecyclerview2;

importandroid.content.Context;

importandroid.support.v7.widget.RecyclerView;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.TextView;

importjava.util.ArrayList;

/**

 * Created by cj on 2017/1/12.

 */

publicclassMainAdapterextendsRecyclerView.Adapter {

  privateContext context;

  privateArrayListdatas =newArrayList<>();

  privateMyItemOnClickListener myItemOnClickListener;

  privatefinalintTYPE_0 =0;

  privatefinalintTYPE_1 =1;

  publicMainAdapter(Context context) {

    this.context = context;

  }

  @Override

  publicintgetItemViewType(intposition) {

    if(position %3==0) {

      returnTYPE_0;

    }else{

      returnTYPE_1;

    }

  }

  publicvoidsetOnClickListener(MyItemOnClickListener onClickListener) {

    this.myItemOnClickListener = onClickListener;

  }

  @Override

  publicRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,intviewType) {

    if(viewType == TYPE_0) {

      View inflate = LayoutInflater.from(context).inflate(R.layout.item_main,null);

      returnnewMyViewHolder(inflate);

    }else{

      View inflate = LayoutInflater.from(context).inflate(R.layout.item_main2,null);

      returnnewMyViewHolder2(inflate);

    }

  }

  @Override

  publicvoidonBindViewHolder(RecyclerView.ViewHolder holder,finalintposition) {

    if(getItemViewType(position) == TYPE_0) {

      MyViewHolder myViewHolder = (MyViewHolder)holder;

      myViewHolder.name.setText(datas.get(position));

      myViewHolder.name.setOnClickListener(newView.OnClickListener() {

        @Override

        publicvoidonClick(View v) {

          myItemOnClickListener.onItemClick(v,position);

        }

      });

    }else{

      MyViewHolder2 myViewHolder = (MyViewHolder2)holder;

      myViewHolder.name.setText(datas.get(position));

      myViewHolder.name.setOnClickListener(newView.OnClickListener() {

        @Override

        publicvoidonClick(View v) {

          myItemOnClickListener.onItemClick(v,position);

        }

      });

    }

  }

  @Override

  publicintgetItemCount() {

    returndatas.size();

  }

  publicvoidsetData(ArrayListdata) {

    if(data ==null) {

      return;

    }

    this.datas.addAll(data);

  }

  publicclassMyViewHolderextendsRecyclerView.ViewHolder{

    publicTextView name;

    publicMyViewHolder(View itemView) {

      super(itemView);

      name = (TextView) itemView.findViewById(R.id.name);

    }

  }

  publicclassMyViewHolder2extendsRecyclerView.ViewHolder{

    publicTextView name;

    publicMyViewHolder2(View itemView) {

      super(itemView);

      name = (TextView) itemView.findViewById(R.id.name);

    }

  }

}

//自定义分割线继承系统的 RecyclerView.ItemDecoration

packagebaway.com.cj.myrecyclerview2;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.Rect;

importandroid.support.v7.widget.RecyclerView;

importandroid.util.Log;

importandroid.view.View;

/**

 * Created by cj on 2017/1/12.

 */

publicclassMyItemDecorationextendsRecyclerView.ItemDecoration {

  privatePaint paint;

  publicMyItemDecoration() {

    paint =newPaint();

    paint.setColor(Color.BLUE);

  }

  @Override

  publicvoidonDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {

    super.onDraw(c, parent, state);

    //c.drawCircle(300,300,300,paint);

    intchildCount = parent.getChildCount();

    for(inti =0; i < childCount; i++) {

      View childAt = parent.getChildAt(i);

      c.drawRect(childAt.getLeft(),childAt.getBottom(),childAt.getWidth()+childAt.getLeft(),childAt.getBottom()+5,paint);

    }

  }

  @Override

  publicvoidonDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {

    super.onDrawOver(c, parent, state);

//    int childCount = parent.getChildCount();

//    for (int i = 0; i < childCount; i++) {

//      View childAt = parent.getChildAt(i);

//      c.drawRect(childAt.getLeft(),childAt.getTop(),childAt.getWidth()+childAt.getLeft(),childAt.getBottom()+5,paint);

//    }

  }

  @Override

  publicvoidgetItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

    super.getItemOffsets(outRect, view, parent, state);

    outRect.set(20,0,20,5);

  }

}

 

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • MyBatis-Plus自动填充功能失效导致的原因及解决

    这篇文章主要介绍了MyBatis-Plus自动填充功能失效导致的原因及解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • C#实现延时并自动关闭MessageBox的方法

    这篇文章主要介绍了C#实现延时并自动关闭MessageBox的方法,非常实用的功能,需要的朋友可以参考下...2020-06-25
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20
  • Android开发中布局中的onClick简单完成多控件时的监听的利与弊

    本文章来为各位介绍一篇关于Android开发中布局中的onClick简单完成多控件时的监听的利与弊的例子,希望这个例子能够帮助到各位朋友. 首先在一个控件加上这么一句:and...2016-09-20