想要做的效果是从左往右滚动播放效果图暂时没有 以后补上
第一步设置图片居中显示不做缩放 代码如下
<ImageView
android:id="@+id/start_up_bg"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/start_up_bg"
android:scaleType="center"/>
第二步按照图片的高度和手机屏幕的高度比将图片缩放到一定的比例 这样能保证图片的竖直方向上可以显示完全水平方向则可以通过接下来的水平滚动来显示
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.start_up_bg);
int height = bitmap.getHeight();
int width = bitmap.getWidth();
int wantHeight = getResources().getDisplayMetrics().heightPixels;
int screenWidth = getResources().getDisplayMetrics().widthPixels;
float scaleY = ((float)wantHeight)/height;
Matrix matrix = new Matrix();
matrix.postScale(scaleY, scaleY);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
第三步 计算图片最左侧有多少个像素未显示在屏幕上 然后让控件滚动到该位置 由于图片是居中显示所以是左右未显示部分是一样大小的
计算出的像素值limitDisX将在接下来被用到
scrollView.setImageBitmap(resizedBitmap);
limitDisX = (resizedBitmap.getWidth() - screenWidth)/2;
scrollView.scrollTo(-limitDisX, 0);
第四步 利用android的Handler机制 没过10ms进行一个scroll 当到达右侧边缘时 往反方向运动 到达左侧边缘时同理
isScrollToRight为true时应该向右不断移动 当到达边缘时改变其状态 此时为false 则 应不断向左移动
//左右两边最大的滚动范围
int limitDisX = 0;
//判断是否是往右移动
boolean isScrollToRight = false;
//记录当前滚动的位置
int curX = 0;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (isScrollToRight) {
if(curX <= -limitDisX) {
isScrollToRight = false;
curX = -limitDisX;
} else {
curX--;
scrollView.scrollTo(curX, 0);
}
} else {
if(curX >= limitDisX) {
isScrollToRight = true;
curX = limitDisX;
} else {
curX ++;
scrollView.scrollTo(curX, 0);
}
}
handler.sendEmptyMessageDelayed(0, 10);
}
};
效果图以后补上