Android实现实时滑动ViewPager的2种方式

先看看效果图:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.welcome.MainActivity" > <android.support.v4.view.ViewPager android:id="@+id/mViewPager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="30dp" > <com.example.welcome.PagerCursor android:id="@+id/pagerCursor" android:layout_width="fill_parent" android:layout_height="5dp" /> </FrameLayout> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="30dp" > <com.example.welcome.CustomeDotGroup android:id="@+id/ll_point_group" android:layout_width="fill_parent" android:layout_height="10dp" android:orientation="horizontal" > </com.example.welcome.CustomeDotGroup> <View android:id="@+id/red_point" android:layout_width="10dp" android:layout_height="10dp" android:background="@drawable/point_red" /> </FrameLayout> </RelativeLayout>

MainActivity

package com.example.welcome; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.ViewGroup; import android.view.animation.TranslateAnimation; import android.widget.ImageView; public class MainActivity extends Activity { private ViewPager mViewPager; MyAdapter mAdapter; private ArrayList<ImageView> imageViewList; View red_point; private int lastDis; PagerCursor pagerCursor; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pagerCursor = (PagerCursor) findViewById(R.id.pagerCursor); red_point = findViewById(R.id.red_point); imageViewList = new ArrayList<ImageView>(); int[] imagesInt = {R.drawable.p1,R.drawable.p2,R.drawable.p3}; for (int i = 0; i < imagesInt.length; i++) { ImageView imageView = new ImageView(MainActivity.this); imageView.setBackgroundResource(imagesInt[i]); imageViewList.add(imageView); } mViewPager = (ViewPager) findViewById(R.id.mViewPager); mAdapter = new MyAdapter(); mViewPager.setAdapter(mAdapter); mViewPager.setOnPageChangeListener(new OnPageChangeListener() { private boolean isDragging; @Override public void onPageSelected(int arg0) { } @Override public void onPageScrolled(int position, float screenOffSet, int arg2) { TranslateAnimation animation = null; if (isDragging) { int dp2px = PhoneUtils.dp2px(MainActivity.this, 20f); int offSet = (int) (position*dp2px + dp2px*screenOffSet); animation = new TranslateAnimation(lastDis, offSet, 0f, 0f); animation.setDuration(200); animation.setFillAfter(true); red_point.startAnimation(animation); lastDis = offSet; } float[] screenSize = MeasureUtil.getScreenSize(MainActivity.this); float itemWidth = screenSize[0]/3; pagerCursor.SetOffSet(position,screenOffSet,itemWidth); } @Override public void onPageScrollStateChanged(int arg0) { switch (arg0) { case ViewPager.SCROLL_STATE_DRAGGING://滑动 isDragging = true; break; case ViewPager.SCROLL_STATE_IDLE://空闲 isDragging = false; break; default: break; } } }); } class MyAdapter extends PagerAdapter{ @Override public int getCount() { return imageViewList.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(imageViewList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(imageViewList.get(position)); return imageViewList.get(position); } } }

CustomeDotGroup

package com.example.welcome; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; public class CustomeDotGroup extends LinearLayout { private Context context; public CustomeDotGroup(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = context; initRes(); } public CustomeDotGroup(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CustomeDotGroup(Context context) { this(context, null); } private void initRes() { int dotWidthOrHeight = PhoneUtils.dp2px(context, 10); for (int i = 0; i < 3; i++) { ImageView dotImageView = new ImageView(context); dotImageView.setBackgroundResource(R.drawable.point_normal); LayoutParams dotImageViewParams = new LayoutParams(dotWidthOrHeight, dotWidthOrHeight); if (i != 0) { dotImageViewParams.leftMargin = dotWidthOrHeight; } dotImageView.setLayoutParams(dotImageViewParams); this.addView(dotImageView); } } }

PagerCursor

package com.example.welcome; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; import android.view.View; public class PagerCursor extends View { Context context; private Paint mPaint; private int screenWidth; private int desRight; private float itemWidth; public PagerCursor(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public PagerCursor(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; initRes(); // TODO Auto-generated constructor stub } public PagerCursor(Context context) { super(context); // TODO Auto-generated constructor stub } private void initRes() { float[] screenSize = MeasureUtil.getScreenSize((Activity) context); screenWidth = (int) screenSize[0]; Log.d("TAG", ",screenWidth" + screenWidth); mPaint = new Paint(); mPaint.setColor(getResources().getColor(R.color.contentPressColor)); mPaint.setStyle(Paint.Style.FILL); mPaint.setAntiAlias(true); } public void SetOffSet(int position, float screenOffSet, float itemWidth) { int offSet = (int) (position * itemWidth + itemWidth * screenOffSet); this.itemWidth = itemWidth; desRight = offSet; Log.d("TAG", "screenOffSet:" + screenOffSet + ",position" + position + ",desRigh-->t" + desRight + ",itemWidth" + itemWidth); invalidate(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Log.d("TAG", "onDraw,desRigh-->t" + desRight + ",itemWidth" + itemWidth); canvas.drawRect(desRight, 0f, desRight + itemWidth, PhoneUtils.dp2px(context, 5), mPaint); } }

MeasureUtil

package com.example.welcome; import android.app.Activity; import android.util.DisplayMetrics; /** * 测绘工具�? */ public final class MeasureUtil { /** * 获取屏幕尺寸 * * @param activity * Activity * @return 屏幕尺寸像素值,下标�?的�?为宽,下标为1的�?为高 */ public static float[] getScreenSize(Activity activity) { DisplayMetrics metrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); return new float[] { metrics.widthPixels, metrics.heightPixels }; } }

PhoneUtils

package com.example.welcome; import android.content.Context; public class PhoneUtils { public static int dp2px(Context context,float dpValue){ float scale = context.getResources().getDisplayMetrics().density; return (int)(dpValue * scale +0.5f); } }

源码下载:http://xiazai.jb51.net/201610/yuanma/androidviewpaper(jb51.net).rar

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

时间: 2024-09-22 22:28:59

Android实现实时滑动ViewPager的2种方式的相关文章

Android实现实时滑动ViewPager的2种方式_Android

先看看效果图: activity_main.xml  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_par

Android实现关机与重启的几种方式(推荐)_Android

下面我们来探究Android如何实现关机,重启:在Android中这种操作往往需要管理员级别,或者root Android实现的方式如下几种: 默认的SDK并没有提供应用开发者直接的Android系统关机或重启的API接口,一般来讲,实现Android系统的关机或重启,需要较高的权限(系统权限甚至Root权限).所以,在一般的APP中,如果想要实现关机或重启功能,要么是在App中声明系统权限,要么是通过某种"间接"的方式,比如广播或反射,来间接实现系统关机或重启.再者,就是放在源码环境

关于Android Activity之间传递数据的6种方式

使用Inten的putExtra传递 第一个Activity中 //创建意图对象 Intent intent = new Intent(this,TwoActivity.class); //设置传递键值对 intent.putExtra("data",str); //激活意图 startActivity(intent); 第二个Activity中 // 获取意图对象 Intent intent = getIntent(); //获取传递的值 String str = intent.ge

Android实现关机与重启的几种方式(推荐)

下面我们来探究Android如何实现关机,重启:在Android中这种操作往往需要管理员级别,或者root Android实现的方式如下几种: 默认的SDK并没有提供应用开发者直接的Android系统关机或重启的API接口,一般来讲,实现Android系统的关机或重启,需要较高的权限(系统权限甚至Root权限).所以,在一般的APP中,如果想要实现关机或重启功能,要么是在App中声明系统权限,要么是通过某种"间接"的方式,比如广播或反射,来间接实现系统关机或重启.再者,就是放在源码环境

android中Webview实现截屏三种方式小结

本人最近学习了android中Webview实现截屏三种方式,下面我来记录一下,有需要了解的朋友可参考.希望此文章对各位有所帮助. 第一种方式 通过调用webview.capturePicture(),得到一个picture对象,根据图像的宽和高创建一个Bitmap,再创建一个canvas,绑定bitmap,最后用picture去绘制. //获取Picture对象 Picture picture = wv_capture.capturePicture(); //得到图片的宽和高(没有reflec

我的Android进阶之旅------&amp;gt;Android安全退出应用程序的几种方式

当应用不再使用时,通常需要关闭应用,可以使用以下几种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程.  建议使用这种方式 android.os.Process.killProcess(android.os.Process.myPid()) 第二种方法:终止当前正在运行的Java虚拟机,导致程序终止 System.exit(0); 或者 Runtime.getRuntime().exit(0); 第三种方法:强制关闭与该包有关联的一切执行 android2.1之前

详解Android提交数据到服务器的两种方式四种方法_Android

Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法. 代码比较简单,这里不去过多的阐述,直接看代码. /** * @author Dylan * 本类封装了Android中向web服务器提交数据的两种方式四种方法 */ public class SubmitDataByHttpClientAndOrdinaryWay { /** * 使用get请求以普通方式提交数据 * @param map 传

Android 启动 Service(startservice和bindservice) 两种方式的区别_Android

Android Service 生命周期可以促使移动设备的创新,让用户体验到最优越的移动服务,只有broadcast receivers执行此方法的时候才是激活的,当 onReceive()返回的时候,它就是非激活状态. 如果没有程序停止它或者它自己停止,service将一直运行.在这种模式下,service开始于调用Context.startService() ,停止于Context.stopService(). service可以通过调用Android Service 生命周期() 或 Se

Android 启动 Service(startservice和bindservice) 两种方式的区别

Android Service 生命周期可以促使移动设备的创新,让用户体验到最优越的移动服务,只有broadcast receivers执行此方法的时候才是激活的,当 onReceive()返回的时候,它就是非激活状态. 如果没有程序停止它或者它自己停止,service将一直运行.在这种模式下,service开始于调用Context.startService() ,停止于Context.stopService(). service可以通过调用Android Service 生命周期() 或 Se