Android特效第三篇:自定義Gallery實戰(仿網易) .
阿新 • • 發佈:2019-02-18
Android系統提供了一個Gallery畫廊控制元件,在專案很多時候都會用到Gallery,比如新浪首頁的廣告,網易看客戶端首頁等隨處可見,今天我自己定義了一個仿網易的Gallery與大家共享。
首先請看效果圖:
程式碼:
[java] view plaincopyprint?- package com.jefry.gallery;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.content.Context;
- import android.content.res.Resources;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.util.AttributeSet;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.BaseAdapter;
- import android.widget.FrameLayout;
- import android.widget.Gallery;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- /**
- * @author jefry
- *
- */
- publicclass MyGallery extends FrameLayout {
- List<Showing> showings =
- privatestaticfinaldouble GALLERY_IMAGE_HORIZONTAL_RATIO = 1.0;
- privatestaticfinaldouble GALLERY_IMAGE_VERTICAL_RATIO = 1.0;
- privatestaticfinalint GALLERY_SPACING = 2;
- private Context mContext;
- private PromotionImages promotionImages;
- private LinearLayout mBottomLayout;
- private TextView tips;
- privateint mPcount;
- private ImageView[] icons;
- public MyGallery(Context context) {
- super(context);
- }
- public MyGallery(Context context, AttributeSet attrs) {
- super(context, attrs);
- mContext = context;
- promotionImages = new PromotionImages(context);
- LayoutParams layoutParams = new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT,android.view.ViewGroup.LayoutParams.FILL_PARENT);
- layoutParams.bottomMargin = 20;
- this.addView(promotionImages, layoutParams);
- LayoutInflater inflater = ((Activity) context).getLayoutInflater();
- View indicator = inflater.inflate(R.layout.promotion_hint,null);
- this.addView(indicator);
- //
- mBottomLayout = (LinearLayout) indicator.findViewById(R.id.promotion_index_layout);
- tips = (TextView) indicator.findViewById(R.id.promotion_tip);
- initBottomIcons();
- }
- class PromotionImages extends Gallery {
- PromotionImagesAdapter promotionAdapter;
- public PromotionImages(Context context) {
- super(context);
- this.setSpacing(GALLERY_SPACING);
- promotionAdapter = new PromotionImagesAdapter(context);
- this.setAdapter(promotionAdapter);
- this.setOnItemSelectedListener(new OnItemSelectedListener() {
- publicvoid onItemSelected(AdapterView<?> parent, View view,
- int position, long id) {
- update(position);
- }
- publicvoid onNothingSelected(AdapterView<?> parent) {
- }
- });
- }
- privatefinalvoid update(int selected) {
- tips.setText(showings.get(selected).getText());
- for (int i = 0; i < mPcount; i++) {
- if (selected == i) {
- icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_focus));
- } else {
- icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_default));
- }
- }
- }
- }
- privatefinalvoid initBottomIcons() {
- mPcount = showings.size();
- icons = new ImageView[mPcount];
- mBottomLayout.removeAllViews();
- mBottomLayout.setWeightSum(mPcount);
- //
- for (int i = 0; i < mPcount; i++) {
- icons[i] = new ImageView(mContext);
- if(i == 0) icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_focus));
- else icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_default));
- mBottomLayout.addView(icons[i]);
- }
- }
- privatefinalclass PromotionImagesAdapter extends BaseAdapter {
- public PromotionImagesAdapter(Context context) {
- Resources res = getResources();
- Bitmap bmp = BitmapFactory.decodeResource(res,
- R.drawable.test2);
- Showing show1 = new Showing();
- show1.setBitmap(bmp);
- show1.setText("jefry_1");
- Bitmap bmp1 = BitmapFactory.decodeResource(res,
- R.drawable.test1);
- Showing show2 = new Showing();
- show2.setBitmap(bmp1);
- show2.setText("jefry_2");
- Bitmap bmp3 = BitmapFactory.decodeResource(res,
- R.drawable.test3);
- Showing show3 = new Showing();
- show3.setBitmap(bmp3);
- show3.setText("jefry_3");
- showings.add(show1);
- showings.add(show2);
- showings.add(show3);
- }
- publicint getCount() {
- return showings.size();
- }
- public Object getItem(int position) {
- return position;
- }
- publiclong getItemId(int position) {
- return position;
- }
- public View getView(finalint position, final View convertView,
- ViewGroup parent) {
- //System.out.println("showings = " + showings.size());
- //System.out.println("position=" + position);
- final Showing promotion = showings.get(position);
- ImageView promotionImage = (ImageView) convertView;
- if (promotionImage == null) {
- promotionImage = new ImageView(mContext);
- System.out.println("postion=" + position + ",promotion.getBitmap()1 = "+ promotion.getBitmap());
- }
- int width = (int) (MyGallery.this.getWidth() * GALLERY_IMAGE_HORIZONTAL_RATIO);
- int height = (int) (MyGallery.this.getHeight() * GALLERY_IMAGE_VERTICAL_RATIO);
- promotionImage.setLayoutParams(new Gallery.LayoutParams(width,height));
- promotionImage.setScaleType(ImageView.ScaleType.CENTER);
- promotionImage.setScaleType(ImageView.ScaleType.FIT_XY);
- System.out.println("postion=" + position + ",promotion.getBitmap() = "+ promotion.getBitmap());
- promotionImage.setImageBitmap(promotion.getBitmap());
- return promotionImage;
- }
- }
- }
package com.jefry.gallery;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* @author jefry
*
*/
public class MyGallery extends FrameLayout {
List<Showing> showings = new ArrayList<Showing>();
private static final double GALLERY_IMAGE_HORIZONTAL_RATIO = 1.0;
private static final double GALLERY_IMAGE_VERTICAL_RATIO = 1.0;
private static final int GALLERY_SPACING = 2;
private Context mContext;
private PromotionImages promotionImages;
private LinearLayout mBottomLayout;
private TextView tips;
private int mPcount;
private ImageView[] icons;
public MyGallery(Context context) {
super(context);
}
public MyGallery(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
promotionImages = new PromotionImages(context);
LayoutParams layoutParams = new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT,android.view.ViewGroup.LayoutParams.FILL_PARENT);
layoutParams.bottomMargin = 20;
this.addView(promotionImages, layoutParams);
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
View indicator = inflater.inflate(R.layout.promotion_hint,null);
this.addView(indicator);
//
mBottomLayout = (LinearLayout) indicator.findViewById(R.id.promotion_index_layout);
tips = (TextView) indicator.findViewById(R.id.promotion_tip);
initBottomIcons();
}
class PromotionImages extends Gallery {
PromotionImagesAdapter promotionAdapter;
public PromotionImages(Context context) {
super(context);
this.setSpacing(GALLERY_SPACING);
promotionAdapter = new PromotionImagesAdapter(context);
this.setAdapter(promotionAdapter);
this.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
update(position);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
private final void update(int selected) {
tips.setText(showings.get(selected).getText());
for (int i = 0; i < mPcount; i++) {
if (selected == i) {
icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_focus));
} else {
icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_default));
}
}
}
}
private final void initBottomIcons() {
mPcount = showings.size();
icons = new ImageView[mPcount];
mBottomLayout.removeAllViews();
mBottomLayout.setWeightSum(mPcount);
//
for (int i = 0; i < mPcount; i++) {
icons[i] = new ImageView(mContext);
if(i == 0) icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_focus));
else icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_default));
mBottomLayout.addView(icons[i]);
}
}
private final class PromotionImagesAdapter extends BaseAdapter {
public PromotionImagesAdapter(Context context) {
Resources res = getResources();
Bitmap bmp = BitmapFactory.decodeResource(res,
R.drawable.test2);
Showing show1 = new Showing();
show1.setBitmap(bmp);
show1.setText("jefry_1");
Bitmap bmp1 = BitmapFactory.decodeResource(res,
R.drawable.test1);
Showing show2 = new Showing();
show2.setBitmap(bmp1);
show2.setText("jefry_2");
Bitmap bmp3 = BitmapFactory.decodeResource(res,
R.drawable.test3);
Showing show3 = new Showing();
show3.setBitmap(bmp3);
show3.setText("jefry_3");
showings.add(show1);
showings.add(show2);
showings.add(show3);
}
public int getCount() {
return showings.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, final View convertView,
ViewGroup parent) {
//System.out.println("showings = " + showings.size());
//System.out.println("position=" + position);
final Showing promotion = showings.get(position);
ImageView promotionImage = (ImageView) convertView;
if (promotionImage == null) {
promotionImage = new ImageView(mContext);
System.out.println("postion=" + position + ",promotion.getBitmap()1 = "+ promotion.getBitmap());
}
int width = (int) (MyGallery.this.getWidth() * GALLERY_IMAGE_HORIZONTAL_RATIO);
int height = (int) (MyGallery.this.getHeight() * GALLERY_IMAGE_VERTICAL_RATIO);
promotionImage.setLayoutParams(new Gallery.LayoutParams(width,height));
promotionImage.setScaleType(ImageView.ScaleType.CENTER);
promotionImage.setScaleType(ImageView.ScaleType.FIT_XY);
System.out.println("postion=" + position + ",promotion.getBitmap() = "+ promotion.getBitmap());
promotionImage.setImageBitmap(promotion.getBitmap());
return promotionImage;
}
}
}
原始碼下載:http://download.csdn.net/detail/jefry_xdz/4521377