Android自定义左右或上下滑动翻页效果

Android自定义左右或上下滑动翻页效果,第1张

概述本文实例为大家分享了Android自定义左右或上下滑动翻页展示的具体代码,供大家参考,具体内容如下

本文实例为大家分享了AndroID自定义左右或上下滑动翻页展示的具体代码,供大家参考,具体内容如下

该自定义的效果和VIEwPage+Fragment差不多

上下滑动翻页,继承ScrollVIEw

public class SlIDeScrollVIEw extends ScrollVIEw implements PageSlIDe{  private TotalSlIDe totalSlIDe;  public SlIDeScrollVIEw(AppCompatActivity context) {   super(context);   try {    totalSlIDe=new TotalSlIDe(this,context);   } catch (NoSuchMethodException e) {    e.printstacktrace();   }   totalSlIDe.init(context);   totalSlIDe.linearLayout.setorIEntation(totalSlIDe.linearLayout.VERTICAL);   this.setLayoutParams(totalSlIDe.params);   this.setVerticalScrollbarEnabled(false);   this.addVIEw(totalSlIDe.linearLayout);  }  public float getScroll() {   return super.getScrollY();  }  public voID setScroll(Integer value) {   super.setScrollY(value);  }  @OverrIDe  public boolean ontouchEvent(MotionEvent ev) {   try {    return totalSlIDe.MytouchEvent(ev);   } catch (InvocationTargetException e) {    e.printstacktrace();   } catch (illegalaccessexception e) {    e.printstacktrace();   }   return touchEvent(ev);  }  public boolean touchEvent(MotionEvent ev){   return super.ontouchEvent(ev);  }  public TotalSlIDe getTotalSlIDe(){   return this.totalSlIDe;  } } 

左右滑动翻页,继承horizontalscrollview

public class SlIDehorizontalscrollview extends horizontalscrollview implements PageSlIDe{   private TotalSlIDe totalSlIDe;   public SlIDehorizontalscrollview(AppCompatActivity context){     super(context);     try {       totalSlIDe=new TotalSlIDe(this,context);     } catch (NoSuchMethodException e) {       e.printstacktrace();     }     totalSlIDe.init(context);     totalSlIDe.linearLayout.setorIEntation(totalSlIDe.linearLayout.HORIZONTAL);     this.setLayoutParams(totalSlIDe.params);     this.setHorizontalScrollbarEnabled(false);     this.addVIEw(totalSlIDe.linearLayout);   }   public float getScroll() {     return getScrollX();   }   public voID setScroll(Integer value) {     setScrollX(value);   }   @OverrIDe   public boolean ontouchEvent(MotionEvent ev) {     try {       return totalSlIDe.MytouchEvent(ev);     } catch (InvocationTargetException e) {       e.printstacktrace();     } catch (illegalaccessexception e) {       e.printstacktrace();     }     return touchEvent(ev);   }   public boolean touchEvent(MotionEvent ev){     return super.ontouchEvent(ev);   }   public TotalSlIDe getTotalSlIDe(){     return this.totalSlIDe;   } } 

下面的是两种翻页的底层

package com.hy.VIEw;  import androID.os.Handler; import androID.support.annotation.LayoutRes; import androID.support.v7.app.AppCompatActivity; import androID.util.displayMetrics; import androID.vIEw.MotionEvent; import androID.vIEw.VIEw; import androID.vIEw.WindowManager; import androID.Widget.linearLayout;  import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List;  /**  * 作用:实现上下左右滑动翻页,效果如 微信左右滑动效果  */  public interface PageSlIDe {   public TotalSlIDe getTotalSlIDe();   public boolean touchEvent(MotionEvent ev);   public float getScroll();   public voID setScroll(Integer value);   class TotalSlIDe{     /**      * 设置翻页速度      * @param speed 速度,默认为20      */     public voID setSpeed(float speed){       this.speed=speed;     }     TotalSlIDe(PageSlIDe pageSlIDe,AppCompatActivity context) throws NoSuchMethodException {       this.pageSlIDe=pageSlIDe;       this.context=context;       WindowManager wm = context.getwindowManager();       if(pageSlIDe instanceof SlIDehorizontalscrollview){         fill = wm.getDefaultdisplay().getWIDth();         get=pageSlIDe.getClass().getmethod("getScroll");         set=pageSlIDe.getClass().getmethod("setScroll",Integer.class);         //Toast.makeText(context,"TotalSlIDe:"+get.getname(),Toast.LENGTH_LONG).show();       }else if(pageSlIDe instanceof SlIDeScrollVIEw){         fill = wm.getDefaultdisplay().getHeight();         get=pageSlIDe.getClass().getmethod("getScroll");         set=pageSlIDe.getClass().getmethod("setScroll",Integer.class);       }     }     //初始化     voID init(AppCompatActivity context){       displayMetrics metrics = new displayMetrics();       context.getwindowManager().getDefaultdisplay().getMetrics(metrics);       params = new linearLayout.LayoutParams(metrics.wIDthPixels,metrics.heightPixels);       linearLayout = new linearLayout(context);       linearLayout.setLayoutParams(params);     }     /**      * 增加页面      * @param layout 该页面的布局文件      * @param myAppCompatActivity 该布局文件的java文件      */     public voID addPage(@LayoutRes int layout,MyAppCompatActivity myAppCompatActivity){       VIEw vIEw=context.getLayoutInflater().inflate(layout,null);       myAppCompatActivity.vIEw=vIEw;       myAppCompatActivity.context=context;       myAppCompatActivity.onCreate();       insertPage(vIEw);     }     /**      * 增加页面      * @param layout 该页面的布局文件      */     public voID addPage(@LayoutRes int layout){       VIEw vIEw=context.getLayoutInflater().inflate(layout,null);       insertPage(vIEw);     }     /**      * 增加页面      * @param myAppCompatActivity 该布局文件的java文件      */     public voID addPage(MyAppCompatActivity myAppCompatActivity){       VIEw vIEw=new VIEw(context);       myAppCompatActivity.vIEw=vIEw;       myAppCompatActivity.context=context;       myAppCompatActivity.onCreate();       insertPage(vIEw);     }     /**      * 切换页面      * @param pageNo 切换页面的下标      */     public voID changePage(int pageNo) {       if(pageNo<Pagelist.size()&&pageNo>=0){         Now=fill*pageNo;         try {           set.invoke(pageSlIDe,(int)Now);         } catch (illegalaccessexception e) {           e.printstacktrace();         } catch (InvocationTargetException e) {           e.printstacktrace();         }         this.pageNo=pageNo;       }     }      /**     * @return 返回当前页面编号     */     public int getPageNo(){       return pageNo;     }     /**      * 删除页面      * @param pageNo 删除页面的下标      */     public voID removePage(int pageNo) {       if (pageNo < Pagelist.size() && pageNo >= 0) {         linearLayout.removeVIEw(Pagelist.get(pageNo));         Pagelist.remove(pageNo);       }     }     /**********************************************************************************************/     //展示页面的Activity     private AppCompatActivity context;     //转换页面的速度,默认为20     private float speed=20;     //当前Activity的页面滑动值倍数     private float fill;     //当前页面     private int pageNo=0;     //当前滚动条的位置     private float Now=0;     //手指点击的位置     private float Down=0;     //手指松开的位置     private float Up=0;     //滑动方向     private float value=0;     //是否为第一次点击     private boolean b=true;     //页面集合     private List<VIEw> Pagelist=new ArrayList<>();     //辅助线程执行     private Handler handler=new Handler();     //get方法     private Method get;     //get方法     private Method set;     //本页布局控件     linearLayout linearLayout;     //页面大小     linearLayout.LayoutParams params;     //多态     private PageSlIDe pageSlIDe;     //简化代码     private voID insertPage(VIEw vIEw){       vIEw.setLayoutParams(params);       Pagelist.add(vIEw);       linearLayout.addVIEw(vIEw);     }     //滑动线程     private Runnable runnable=new Runnable() {       @OverrIDe       public voID run() {         try {           if((b&&(float)get.invoke(pageSlIDe)>=Now)||(!b&&(float)get.invoke(pageSlIDe)<=Now)){             set.invoke(pageSlIDe,(int) (Now-value));             b=true;             handler.removeCallbacks(runnable);           }else{             handler.postDelayed(runnable,1);           }           if(Now==0&&value>0) {             set.invoke(pageSlIDe,(int)((float)get.invoke(pageSlIDe)));           }else{             set.invoke(pageSlIDe,(int)((float)get.invoke(pageSlIDe)+value));           }         } catch (illegalaccessexception e) {           e.printstacktrace();         } catch (InvocationTargetException e) {           e.printstacktrace();         }       }     };     //手指判断     public boolean MytouchEvent(MotionEvent ev) throws InvocationTargetException,illegalaccessexception {       if(b){         Down=(float)get.invoke(pageSlIDe);         b=false;       }       if(ev.getAction()==MotionEvent.ACTION_UP){         Up=(float)get.invoke(pageSlIDe);         value=Up>Down?Up-Down:Down-Up;         b=Up>Down?true:false;         if(value>250){           value=b?speed:-speed;           Now=b?Now+fill:Now-fill;           pageNo= (int) (Now/fill);           handler.post(runnable);         }else{           value=b?-speed:speed;           handler.post(runnable);         }         return false;       }       return pageSlIDe.touchEvent(ev);     }   } } 

最后还需要一个类似于碎片一样的东西

package com.hy.VIEw;  import androID.support.v7.app.AppCompatActivity; import androID.vIEw.VIEw;  /**  * 分页面的java类继承此类 取代AppCompatActivity  */  public abstract class MyAppCompatActivity {  /**   * 当作 this 来用   */  public AppCompatActivity context;  /**   * 当前页面的根布局 用它使用 findVIEwByID() 找控件   */  public VIEw vIEw;  /**   * 初始值在这里面定义   */  public abstract voID onCreate(); } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android自定义左右或上下滑动翻页效果全部内容,希望文章能够帮你解决Android自定义左右或上下滑动翻页效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1143280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存