Android开发中滑动寻呼功能的详细说明
来源:爱站网时间:2020-10-03编辑:网友分享
相信网站内页要实现滚动的效果,会让用户的眼前一亮,如果同时搭配了翻页功能,那就更加的完美了,本文是爱站技术频道小编带给大家的Android开发中滑动寻呼功能的详细说明,一起来了解一下吧!
相信网站内页要实现滚动的效果,会让用户的眼前一亮,如果同时搭配了翻页功能,那就更加的完美了,本文是爱站技术频道小编带给大家的Android开发中滑动寻呼功能的详细说明,一起来了解一下吧!
如图:
Java代码:
package cn.anycall.ju; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.Toast; import cn.anycall.ju.ScrollLayout.OnScreenChangeListenerDataLoad; /** * GridView分页显示安装的应用程序 */ public class AllAppList extends Activity { private ScrollLayout mScrollLayout; private static final float APP_PAGE_SIZE = 4.0f; private Context mContext; private PageControlView pageControl; public MyHandler myHandler; public int n=0; private DataLoading dataLoad; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); mContext = this; setContentView(R.layout.main); dataLoad = new DataLoading(); mScrollLayout = (ScrollLayout)findViewById(R.id.ScrollLayoutTest); myHandler = new MyHandler(this,1); //起一个线程更新数据 MyThread m = new MyThread(); new Thread(m).start(); } /** * gridView 的onItemLick响应事件 */ public OnItemClickListener listener = new OnItemClickListener() { public void onItemClick(AdapterView> parent, View view, int position, long id) { // TODO Auto-generated method stub System.out.println("position="+position); } }; @Override protected void onDestroy() { // TODO Auto-generated method stub android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_BACK) { finish(); return true; } return super.onKeyDown(keyCode, event); } // 更新后台数据 class MyThread implements Runnable { public void run() { try { Thread.sleep(1000*3); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } String msglist = "1"; Message msg = new Message(); Bundle b = new Bundle();// 存放数据 b.putString("rmsg", msglist); msg.setData(b); AllAppList.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI } } class MyHandler extends Handler { private AllAppList mContext; public MyHandler(Context conn,int a) { mContext = (AllAppList)conn; } public MyHandler(Looper L) { super(L); } // 子类必须重写此方法,接受数据 @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); Bundle b = msg.getData(); String rmsg = b.getString("rmsg"); if ("1".equals(rmsg)) { // do nothing List
Java代码:
package cn.anycall.ju; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.Toast; import cn.anycall.ju.ScrollLayout.OnScreenChangeListenerDataLoad; /** * GridView分页显示安装的应用程序 */ public class AllAppList extends Activity { private ScrollLayout mScrollLayout; private static final float APP_PAGE_SIZE = 4.0f; private Context mContext; private PageControlView pageControl; public MyHandler myHandler; public int n=0; private DataLoading dataLoad; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); mContext = this; setContentView(R.layout.main); dataLoad = new DataLoading(); mScrollLayout = (ScrollLayout)findViewById(R.id.ScrollLayoutTest); myHandler = new MyHandler(this,1); //起一个线程更新数据 MyThread m = new MyThread(); new Thread(m).start(); } /** * gridView 的onItemLick响应事件 */ public OnItemClickListener listener = new OnItemClickListener() { public void onItemClick(AdapterView> parent, View view, int position, long id) { // TODO Auto-generated method stub System.out.println("position="+position); } }; @Override protected void onDestroy() { // TODO Auto-generated method stub android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_BACK) { finish(); return true; } return super.onKeyDown(keyCode, event); } // 更新后台数据 class MyThread implements Runnable { public void run() { try { Thread.sleep(1000*3); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } String msglist = "1"; Message msg = new Message(); Bundle b = new Bundle();// 存放数据 b.putString("rmsg", msglist); msg.setData(b); AllAppList.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI } } class MyHandler extends Handler { private AllAppList mContext; public MyHandler(Context conn,int a) { mContext = (AllAppList)conn; } public MyHandler(Looper L) { super(L); } // 子类必须重写此方法,接受数据 @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); Bundle b = msg.getData(); String rmsg = b.getString("rmsg"); if ("1".equals(rmsg)) { // do nothing Listlist = new ArrayList (); for(int i =0;i
Java代码:
package cn.anycall.ju; import java.util.ArrayList; import java.util.List; import java.util.Map; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import cn.anycall.ju.R; public class AppAdapter extends BaseAdapter { private ListmList; private Context mContext; public static final int APP_PAGE_SIZE = 4; private PackageManager pm; public AppAdapter(Context context, List list, int page) { mContext = context; pm = context.getPackageManager(); mList = new ArrayList (); int i = page * APP_PAGE_SIZE; int iEnd = i+APP_PAGE_SIZE; while ((i
Java代码:
package cn.anycall.ju; import java.util.ArrayList; import java.util.List; import java.util.Map; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import cn.anycall.ju.R; public class AppAdapter extends BaseAdapter { private ListmList; private Context mContext; public static final int APP_PAGE_SIZE = 4; private PackageManager pm; public AppAdapter(Context context, List list, int page) { mContext = context; pm = context.getPackageManager(); mList = new ArrayList (); int i = page * APP_PAGE_SIZE; int iEnd = i+APP_PAGE_SIZE; while ((i
Java代码:
package cn.anycall.ju; import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.LinearLayout; import cn.anycall.ju.R; import cn.anycall.ju.ScrollLayout.OnScreenChangeListener; public class PageControlView extends LinearLayout { private Context context; private int count; public void bindScrollViewGroup(ScrollLayout scrollViewGroup) { this.count=scrollViewGroup.getChildCount(); System.out.println("count="+count); generatePageControl(scrollViewGroup.getCurrentScreenIndex()); scrollViewGroup.setOnScreenChangeListener(new OnScreenChangeListener() { public void onScreenChange(int currentIndex) { // TODO Auto-generated method stub generatePageControl(currentIndex); } }); } public PageControlView(Context context) { super(context); this.init(context); } public PageControlView(Context context, AttributeSet attrs) { super(context, attrs); this.init(context); } private void init(Context context) { this.context=context; } private void generatePageControl(int currentIndex) { this.removeAllViews(); int pageNum = 6; // 显示多少个 int pageNo = currentIndex+1; //第几页 int pageSum = this.count; //总共多少页 if(pageSum>1){ int currentNum = (pageNo % pageNum == 0 ? (pageNo / pageNum) - 1 : (int) (pageNo / pageNum)) * pageNum; if (currentNum pageNum){ ImageView imageView = new ImageView(context); imageView.setImageResource(R.drawable.zuo); this.addView(imageView); } for (int i = 0; i pageSum || pageSum (currentNum + pageNum)) { ImageView imageView = new ImageView(context); imageView.setImageResource(R.drawable.you); this.addView(imageView); } } } }
Java代码:
package cn.anycall.ju; import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.LinearLayout; import cn.anycall.ju.R; import cn.anycall.ju.ScrollLayout.OnScreenChangeListener; public class PageControlView extends LinearLayout { private Context context; private int count; public void bindScrollViewGroup(ScrollLayout scrollViewGroup) { this.count=scrollViewGroup.getChildCount(); System.out.println("count="+count); generatePageControl(scrollViewGroup.getCurrentScreenIndex()); scrollViewGroup.setOnScreenChangeListener(new OnScreenChangeListener() { public void onScreenChange(int currentIndex) { // TODO Auto-generated method stub generatePageControl(currentIndex); } }); } public PageControlView(Context context) { super(context); this.init(context); } public PageControlView(Context context, AttributeSet attrs) { super(context, attrs); this.init(context); } private void init(Context context) { this.context=context; } private void generatePageControl(int currentIndex) { this.removeAllViews(); int pageNum = 6; // 显示多少个 int pageNo = currentIndex+1; //第几页 int pageSum = this.count; //总共多少页 if(pageSum>1){ int currentNum = (pageNo % pageNum == 0 ? (pageNo / pageNum) - 1 : (int) (pageNo / pageNum)) * pageNum; if (currentNum pageNum){ ImageView imageView = new ImageView(context); imageView.setImageResource(R.drawable.zuo); this.addView(imageView); } for (int i = 0; i pageSum || pageSum (currentNum + pageNum)) { ImageView imageView = new ImageView(context); imageView.setImageResource(R.drawable.you); this.addView(imageView); } } } }
Java代码:
package cn.anycall.ju; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.Scroller; /** * 仿Launcher中的WorkSapce,可以左右滑动切换屏幕的类 * */ public class ScrollLayout extends ViewGroup { private static final String TAG = "ScrollLayout"; private Scroller mScroller; private VelocityTracker mVelocityTracker; private int mCurScreen; private int mDefaultScreen = 0; private static final int TOUCH_STATE_REST = 0; private static final int TOUCH_STATE_SCROLLING = 1; private static final int SNAP_VELOCITY = 600; private int mTouchState = TOUCH_STATE_REST; private int mTouchSlop; private float mLastMotionX; private float mLastMotionY; private int currentScreenIndex = 0; public int getCurrentScreenIndex() { return currentScreenIndex; } public void setCurrentScreenIndex(int currentScreenIndex) { this.currentScreenIndex = currentScreenIndex; } public ScrollLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); // TODO Auto-generated constructor stub } public ScrollLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub mScroller = new Scroller(context); mCurScreen = mDefaultScreen; mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { // TODO Auto-generated method stub int childLeft = 0; final int childCount = getChildCount(); System.out.println("childCount=" + childCount); for (int i = 0; i SNAP_VELOCITY && mCurScreen > 0) { // Fling enough to move left Log.e(TAG, "snap left"); onScreenChangeListener.onScreenChange(mCurScreen - 1); System.out.println("mCurScreen=" + (mCurScreen - 1)); snapToScreen(mCurScreen - 1); } else if (velocityX mTouchSlop) { mTouchState = TOUCH_STATE_SCROLLING; } break; case MotionEvent.ACTION_DOWN: mLastMotionX = x; mLastMotionY = y; mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST : TOUCH_STATE_SCROLLING; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: mTouchState = TOUCH_STATE_REST; break; } return mTouchState != TOUCH_STATE_REST; } //分页监听 public interface OnScreenChangeListener { void onScreenChange(int currentIndex); } private OnScreenChangeListener onScreenChangeListener; public void setOnScreenChangeListener( OnScreenChangeListener onScreenChangeListener) { this.onScreenChangeListener = onScreenChangeListener; } //动态数据监听 public interface OnScreenChangeListenerDataLoad { void onScreenChange(int currentIndex); } private OnScreenChangeListenerDataLoad onScreenChangeListenerDataLoad; public void setOnScreenChangeListenerDataLoad(OnScreenChangeListenerDataLoad onScreenChangeListenerDataLoad) { this.onScreenChangeListenerDataLoad = onScreenChangeListenerDataLoad; } }
Java代码
package cn.anycall.ju; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.Scroller; /** * 仿Launcher中的WorkSapce,可以左右滑动切换屏幕的类 * */ public class ScrollLayout extends ViewGroup { private static final String TAG = "ScrollLayout"; private Scroller mScroller; private VelocityTracker mVelocityTracker; private int mCurScreen; private int mDefaultScreen = 0; private static final int TOUCH_STATE_REST = 0; private static final int TOUCH_STATE_SCROLLING = 1; private static final int SNAP_VELOCITY = 600; private int mTouchState = TOUCH_STATE_REST; private int mTouchSlop; private float mLastMotionX; private float mLastMotionY; private int currentScreenIndex = 0; public int getCurrentScreenIndex() { return currentScreenIndex; } public void setCurrentScreenIndex(int currentScreenIndex) { this.currentScreenIndex = currentScreenIndex; } public ScrollLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); // TODO Auto-generated constructor stub } public ScrollLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub mScroller = new Scroller(context); mCurScreen = mDefaultScreen; mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { // TODO Auto-generated method stub int childLeft = 0; final int childCount = getChildCount(); System.out.println("childCount=" + childCount); for (int i = 0; i SNAP_VELOCITY && mCurScreen > 0) { // Fling enough to move left Log.e(TAG, "snap left"); onScreenChangeListener.onScreenChange(mCurScreen - 1); System.out.println("mCurScreen=" + (mCurScreen - 1)); snapToScreen(mCurScreen - 1); } else if (velocityX mTouchSlop) { mTouchState = TOUCH_STATE_SCROLLING; } break; case MotionEvent.ACTION_DOWN: mLastMotionX = x; mLastMotionY = y; mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST : TOUCH_STATE_SCROLLING; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: mTouchState = TOUCH_STATE_REST; break; } return mTouchState != TOUCH_STATE_REST; } //分页监听 public interface OnScreenChangeListener { void onScreenChange(int currentIndex); } private OnScreenChangeListener onScreenChangeListener; public void setOnScreenChangeListener( OnScreenChangeListener onScreenChangeListener) { this.onScreenChangeListener = onScreenChangeListener; } //动态数据监听 public interface OnScreenChangeListenerDataLoad { void onScreenChange(int currentIndex); } private OnScreenChangeListenerDataLoad onScreenChangeListenerDataLoad; public void setOnScreenChangeListenerDataLoad(OnScreenChangeListenerDataLoad onScreenChangeListenerDataLoad) { this.onScreenChangeListenerDataLoad = onScreenChangeListenerDataLoad; } }
main.xml
app_item.xml
"
"
上述是爱站技术频道小编为大家带来的Android开发中滑动寻呼功能的详细说明,如果想要学习到更多的知识,可以尝试多多关注js.aizhan.com。