android水平滚动条,Android使用HorizontalScrollView实现水平滚动

HorizontalScrollView 和 ScrollView 都是由 FrameLayout 派生出来的。它们就是一个用于为普通组件添加滚动条的组件。且 HorizontalScrollView 和 ScrollView 里面最多只能包含一个组件(当然组件里面还可以嵌套组件)。它们不同的是 HorizontalScrollView 用于添加水平滚动,而 ScrollView 用于添加垂直滚动。

突然间想到 做一个屏幕下方水平滑动,屏幕上方并作出相应的反应的效果。只是在下方滚动时,屏幕上方没有作出理想的反应,点击事件倒是实现了。最终只能在网上搜索,终于找到了一个。于是作出的效果如下:

d11c410c9937c0fe2cd324f684f71746.png

只是这个效果还有所缺陷,加载了 13 张图片,在屏幕下方水平滚动到最后一页时,第 9 张的图片并没有在上面的显示出来(原作者的也有这个问题);如果图片的数量小于或者等于 4 张时则不能运行。

本例的难点主要在于 MyHorizontalView 类中,并且还有收集而来的注解。

MainActivity.java :

package com.crazy.horizontalscrollviewtest;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import com.crazy.horizontalscrollviewtest.MyHorizontalView.CurrentImageChangeListener;

import com.crazy.horizontalscrollviewtest.MyHorizontalView.OnItemClickListener;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Color;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.ImageView;

import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

private ImageView mImageView;

private MyHorizontalView myHorizontalView;

private List bitmapList;

private MyAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init();

}

private void init() {

mImageView = (ImageView)findViewById(R.id.imageView);

bitmapList = new ArrayList<>(Arrays.asList(

readBitMap(this, R.drawable.bricks),

readBitMap(this, R.drawable.dog),

readBitMap(this, R.drawable.flower),

readBitMap(this, R.drawable.grass),

readBitMap(this, R.drawable.stones),

readBitMap(this, R.drawable.wood),

readBitMap(this, R.drawable.bg_01),

readBitMap(this, R.drawable.bg_02),

readBitMap(this, R.drawable.bg_03),

readBitMap(this, R.drawable.bg_04),

readBitMap(this, R.drawable.bg_05),

readBitMap(this, R.drawable.bg_06),

readBitMap(this, R.drawable.bg_07)

));

myHorizontalView = (MyHorizontalView)findViewById(R.id.my_horizontal);

adapter = new MyAdapter(this, bitmapList);

//设置适配器

myHorizontalView.initDatas(adapter);

//添加滚动回调

myHorizontalView

.setCurrentImageChangeListener(new CurrentImageChangeListener() {

@Override

public void onCurrentImgChanged(int position, View viewIndicator) {

Log.e("==============","=============== " + position);

mImageView.setImageBitmap(bitmapList.get(position));

viewIndicator.setBackgroundColor(Color.parseColor("#AA024DA4"));

}

});

//添加点击回调

myHorizontalView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(View view, int position) {

mImageView.setImageBitmap(bitmapList.get(position));

view.setBackgroundColor(Color.parseColor("#AA024DA4"));

}

});

}

public static Bitmap readBitMap(Context mContext, int resId) {

BitmapFactory.Options opt = new BitmapFactory.Options();

opt.inPreferredConfig = Bitmap.Config.RGB_565;

opt.inPurgeable = true;

opt.inInputShareable = true;

InputStream is = mContext.getResources().openRawResource(resId);

return BitmapFactory.decodeStream(is, null, opt);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值