先说下功能吧,随便设置一个网络图片链接的集合,作为图片的资源。我用ImageLoader来加载图片,在图片未加载完成时会ProgressBar加载状态
在Handler发送一个空消息来实现页面的轮播
我如下是代码我写在一个类中方面观察
补充1 我在scrollview下嵌套ViewPager 会发现VIewPager随便滑动的时候不好使,只有水平方向滑动才行
所以可以自定义MyScrollView
package com.example.huanshop.widget; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ScrollView; public class MyScrollView extends ScrollView { private float xDistance; private float yDistance; private float xLast; private float yLast; public MyScrollView(Context context) { super(context); // TODO Auto-generated constructor stub } public MyScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = yDistance = 0.0f; xLast = ev.getX(); yLast = ev.getY(); break; case MotionEvent.ACTION_MOVE: final float curX = ev.getX(); final float curY = ev.getY(); xDistance += Math.abs(curX - xLast); yDistance += Math.abs(curY - yLast); if (xDistance > yDistance) return false; break; default: break; } return super.onInterceptTouchEvent(ev); } }
补充2 由于屏幕适配的因素而使小点在不同的机子上显示的大小不同达不到想要的效果
可以再用尺寸适配来处理下
dp和px的关系: dp = px/设备密度
float density = getResources().getDisplayMetrics().density;
System.out.println("设备密度:" + density);
320*240(0.75), 480*320(1),480*800(1.5),1280*720(2)
values->dimens.xml values-1280x720
public class DensityUtils { /** * 将dp转为px */ public static int dp2px(Context ctx, float dp) { float density = ctx.getResources().getDisplayMetrics().density; int px = (int) (dp * density + 0.5f);// 4.9->5 4.4->4 return px; } public static float px2dp(Context ctx, int px) { float density = ctx.getResources().getDisplayMetrics().density; float dp = px / (density + 0.5f); return dp; } }
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( DensityUtils.dp2px(this, 10), DensityUtils.dp2px(this, 10)); if (i > 0) { params.leftMargin = DensityUtils.dp2px(this, 10);// 设置圆点间隔 }