|
Demo介绍:首页是一个GridView加载图片,竖屏时显示3列图片,横屏时显示4列图片;并且对图片进行大小限制和加灰色边框处理。
点击某一张图片,会链接到Gallery页面,由于Android自带的Gallery控件滑动效果很不好(滑动一次会加载好多张图片),这里对Gallery进行了扩展,滑动一次只加载一张图片。
Demo效果如下:
1、首页Activity页面,GridViewActivity.java介绍:
加载GridView页面,如果屏幕是竖屏,则显示3列,如果是横屏,则显示4列;并且显示的图片加上灰色边框,这里在适配器GridImageAdapter的getView方法里引用了ImageViewExt类来对图片进行处理,这个类扩展自ImageView;点击其中的某一张图片,会跳转到GalleryActivity页面。
2、ImageViewExt.java文件
/**
*
* @author 空山不空
* 扩展ImageView类,将图片加上边框,并且设置边框为灰色
*/
public class ImageViewExt extends ImageView {
//将图片加灰色的边框
private int color;
public ImageViewExt(Context context) {
super(context);
// TODO Auto-generated constructor stub
color=Color.GRAY;
}
public ImageViewExt(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
color=Color.GRAY;
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
//画边框
Rect rec=canvas.getClipBounds();
rec.bottom--;
rec.right--;
Paint paint=new Paint();
paint.setColor(color);
paint.setStrokeWidth(5);
paint.setStyle(Paint.Style.STROKE);
canvas.drawRect(rec, paint);
}
}
通过重载onDraw方法来画边框和设置边框颜色
3、相册GalleryActivity.java
/**
*
* @author 空山不空
* Gallery图片页面,通过Intent得到GridView传过来的图片位置,加载图片,再设置适配器
*/
public class GalleryActivity extends Activity {
public int i_position = 0;
private DisplayMetrics dm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.mygallery);
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
// 获得Gallery对象
GalleryExt g = (GalleryExt) findViewById(R.id.ga);
//通过Intent得到GridView传过来的图片位置
Intent intent = getIntent();
i_position = intent.getIntExtra("position", 0);
// 添加ImageAdapter给Gallery对象
ImageAdapter ia=new ImageAdapter(this);
g.setAdapter(ia);
g.setSelection(i_position);
//加载动画
Animation an= AnimationUtils.loadAnimation(this,R.anim.scale );
g.setAnimation(an);
}
}
这里有三点:
(1)、扩展Gallery组件,即GalleryExt控件,设置滑动一次只加载一张图片,并且, 如果是第一张图片时,向左滑动会提示“已到第一页”,如果是最后一张图片时,向右滑动会提示“已到第后页”
(2)、接收GridViewActivity页面传过来的参数position,通过这个参数找到具体的图片,通过ImageAdapter适配器加载
(3)、ImageAdapter图片适配器,用来加载图片
4、GalleryExt.java文件
- /**
- *
- * @author 空山不空
- * 扩展Gallery组件,设置滑动一次只加载一张图片,并且,
- * 如果是第一张图片时,向左滑动会提示“已到第一页”
- * 如果是最后一张图片时,向右滑动会提示“已到第后页”
- */
- public class GalleryExt extends Gallery {
- boolean is_first=false;
- boolean is_last=false;
- public GalleryExt(Context context) {
- super(context);
- // TODO Auto-generated constructor stub
- }
-
- public GalleryExt(Context context,AttributeSet paramAttributeSet)
- {
- super(context,paramAttributeSet);
- }
- private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2)
- {
- return e2.getX() > e1.getX();
- }
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float distanceX,
- float distanceY) {
- //通过重构onFling方法,使Gallery控件滑动一次只加载一张图片
- //获取适配器
- ImageAdapter ia=(ImageAdapter)this.getAdapter();
- //得到当前图片在图片资源中的位置
- int p=ia.getOwnposition();
- //图片的总数量
- int count=ia.getCount();
- int kEvent;
- if(isScrollingLeft(e1, e2)){
- //Check if scrolling left
- if(p==0&&is_first){
- //在第一页并且再往左移动的时候,提示
- Toast.makeText(this.getContext(), "已到第一页", Toast.LENGTH_SHORT).show();
- }else if(p==0){
- //到达第一页时,把is_first设置为true
- is_first=true;
- }else{
- is_last=false;
- }
-
- kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
- } else{
- //Otherwise scrolling right
- if(p==count-1&&is_last){
- Toast.makeText(this.getContext(), "已到最后一页", Toast.LENGTH_SHORT).show();
- }else if( p==count-1){
- is_last=true;
- }else{
- is_first=false;
- }
-
- kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
- }
- onKeyDown(kEvent, null);
- return true;
- }
复制代码
5、ImageAdapter.java文件
6、配置文件
(1)AndroidManifest.xml :
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.ajie"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".GalleryActivity" android:label="@string/title" />
- <activity android:name=".GridViewActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
复制代码
(2)mygridview.xml,即GridView页面
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myGrid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:verticalSpacing="6dp"
android:numColumns="3"
android:paddingTop="5dp"
android:stretchMode="columnWidth"
android:gravity="fill_vertical|fill_horizontal"
/>
(3)mygallery.xml,加载图片页面 - <?xml version="1.0" encoding="utf-8"?>
- <GridView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/myGrid"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:verticalSpacing="6dp"
- android:numColumns="3"
- android:paddingTop="5dp"
- android:stretchMode="columnWidth"
- android:gravity="fill_vertical|fill_horizontal"
- />
复制代码
源码下载:
gridGalleryDemo.zip (2.09 MB)
115网盘下载地址:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|