本文主要使用了 HorizontalScrollView实现横向展示图片
一、首先看效果图
二、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=".MainActivity" >
<HorizontalScrollView
android:id="@+id/horizon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:scrollbars="none"
>
<LinearLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
</LinearLayout>
</HorizontalScrollView>
</RelativeLayout>
这就是整个xml布局了,很简单。
三、java部分
package com.example.horizontalscrollview;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.HorizontalScrollView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
HorizontalScrollView horizon_view;
LinearLayout linear;
//图片数组
int[] ImageView = new int[] {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.demo
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private List ArrayList() {
// TODO Auto-generated method stub
return null;
}
//初始化数据
private void initView() {
// TODO Auto-generated method stub
horizon_view=(HorizontalScrollView) findViewById(R.id.horizon);
linear=(LinearLayout) findViewById(R.id.linear);
//从新加载数据,把以前的view全部去掉
linear.removeAllViews();
}
private void initData() {
// TODO Auto-generated method stub
for( int i=0;i<ImageView.length;i++)
{
ImageView img=new ImageView(MainActivity.this);
// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( uitl.dip2px(MainActivity.this, 40), uitl.dip2px(MainActivity.this, 60));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(200,200);
params.setMargins(0, 0, 0, 0);
img.setScaleType(ScaleType.FIT_XY);
img.setLayoutParams(params);
// img.setBorderColor(getResources().getColor(android.R.color.holo_purple));
// img.setBorderWidth(4);
img.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "点击成功", Toast.LENGTH_SHORT).show();
}
});
//添加点击事件(把关键数据传递到下一个页面捷星查询相关的信息)
// img.setOnClickListener(new MyCardClickListener(vo.getCardNo(),vo.getCardName()));
img.setImageResource(ImageView[i]);
linear.addView(img);
}
}
四、实现原理
1.主要是通过for循环实现每次新建一个view,把新建的View添加到LinearLayout布局中。
2.关于监听。
在for循环中为每一个view添加监听,要实现点击一张图片跳转到指定的界面。可以重写监听
private class MyCardClickListener implements OnClickListener {
/**
* 卡号
*/
private String cardNo;
/**
* 卡名称
*/
private String cardName;
public MyCardClickListener(String cardNo,String cardName) {
this.cardNo = cardNo;
this.cardName = cardName;
}
public void onClick(View v) {
// TODO Auto-generated method stub
try {
//LogHelper.d(TAG, "我的卡列表 cardNO:"+cardNo);
// Intent intent = new Intent(PersonLoginAct.this, MyCardDetailsAct.class);
// //卡号
// intent.putExtra("cardNo", cardNo);
// intent.putExtra("cardName", cardName);
// startActivity(intent);
} catch(Exception e) {
//LogHelper.e(TAG, "我的卡列表点击事件异常", e);
}
}
};
因为在实际的代码中。图片都从网络请求下载,可以针对的每张特定的图片,从json中取出唯一的标志或者参数,传到监听,根据拿到的参数去网络请求相应的数据或者跳到一个界面。
链接下载地址: