重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
public class GalleryActivity2extends AppCompatActivity {
平房网站建设公司创新互联,平房网站设计制作,有大型网站制作公司丰富经验。已为平房上千余家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的平房做网站的公司定做!
private LayoutInflatermLayoutInflater;
private ViewPagermVp;
private int[]mImg =new int[]{R.mipmap.pic4, R.mipmap.pic5, R.mipmap.pic6, R.mipmap.pic4, R.mipmap.pic5};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
mLayoutInflater = LayoutInflater.from(this);
mVp = (ViewPager) findViewById(R.id.vp_gallery_vp);
mVp.setAdapter(new MyAdapter());
mVp.setOffscreenPageLimit(mImg.length);//设置预加载数量
mVp.setPageMargin(-150);//控制两幅图之间的间距
mVp.setPageTransformer(true, new ZoomOutPageTransformer());
//viewPager左右两边滑动无效的处理
findViewById(R.id.ll_gallery_outer).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return mVp.dispatchTouchEvent(motionEvent);
}
});
}
class MyAdapterextends PagerAdapter {
@Override
public int getCount() {
return mImg.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public ObjectinstantiateItem(ViewGroup container, final int position) {
View view =mLayoutInflater.inflate(R.layout.item_img, container, false);
ImageView img = view.findViewById(R.id.img_item_img);
//img.setImageResource(R.mipmap.sea);
img.setImageResource(mImg[position]);
img.setScaleType(ImageView.ScaleType.CENTER_CROP);
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(GalleryActivity2.this, "" +position, Toast.LENGTH_SHORT).show();
}
});
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
//设置切换动画
public class ZoomOutPageTransformerimplements ViewPager.PageTransformer {
//自由控制缩放比例
private static final float MAX_SCALE =1f;
private static final float MIN_SCALE =0.6f;//0.85f
@Override
public void transformPage(View page, float position) {
if (position =1) {
float scaleFactor =MIN_SCALE + (1 - Math.abs(position)) * (MAX_SCALE -MIN_SCALE);
page.setScaleX(scaleFactor);
if (position 0) {
page.setTranslationX(-scaleFactor *2);
}else if (position 0) {
page.setTranslationX(scaleFactor *2);
}
page.setScaleY(scaleFactor);
}else {
page.setScaleX(MIN_SCALE);
page.setScaleY(MIN_SCALE);
}
}
}
activity_gallery.xml
android:id="@+id/ll_gallery_outer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:orientation="vertical"
android:id="@+id/vp_gallery_vp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="50dp"
android:clipChildren="false" /
item_img.xml
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:id="@+id/img_item_img"
android:layout_width="200dp"
android:scaleType="centerCrop"
android:layout_height="100dp"
android:src="@mipmap/pic4" /
1、内容需要通过卡片的形式来展现,还有支持加载更多,所以最底部使用RecyclerView,最好是做成预加载形式,提前n页加载下一页,这样体验更好。
2、为了展示更多内容卡片内要支持垂直分页,这时候我使用了ViewPager,一是可以更好的管理分页内容,二是ViewPager的垂直分页容易实现,三是可以处理不同控件之前的滑动冲突
3、ViewPager第一页使用的可回弹的ScrollView,可以在下拉的时候做一些动画之类的操作,例如关注操作等。
4、ViewPager的第二页只是一个普通的ScrollView,具体使用可以根据实际情况来处理
1、RecycleView的分页效果基于PagerSnapHelper,RecyclerView在25.1.0版本中添加了一盒基于SnapHelper的子类PagerSnapHelper,可以使RecyclerView像ViewPager一样的效果,一次只能滑一页,而且居中显示。
2、卡片的效果是在滑动的时候根据RecycleView的偏移量计算缩放因子进行缩放
3、RecycleView的item内有一个垂直分页的VerticalViewPager,VerticalViewPager是在ViewPager上转换X,Y即可
4、解决ViewPager与RecycleView滑动的冲突,在ViewPager中屏蔽父视图的上下滑动事件
5、解决ViewPager子视图ScrollView的冲突,在ViewPager中拦截事件
6、解决ViewPager与BounceScrollView的冲突,在下拉过程中有时会被ViewPager拦截
以上就是此项目中的所有关键点。
ScrollViewDemo 欢迎Star
RecycleViewCardGallary
首先来看下面的效果:
从上面的图片可以看到,当添加多张图片的时候,能够在下方形成一个画廊的效果,我们左右拉动图片来看我们添加进去的图片,效果是不是好了很多呢?下面来看看怎么实现吧!
上面的效果类似Android里面ViewPage的效果,但是跟ViewPager有所不同,ViewPager每次只能显示一张图片。
其实我们是利用到了View的clipChildren属性,我们在这里要把ViewPager以及它的父窗体都设置为false,如下:
android:clipChildren="false"
因为如果clipChildren属性设置为true,就表明我们要将children给clip掉,就是说对于子元素来说,超出当前view的部分都会被切掉,那我们在这里把它设置成false,就表明超出view的部分,不要切掉,依然显示。
xml代码部分:
!-- 配置container和pager的clipChildren=false, 并且指定marginLeft 和 marginRight 的值--
LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="100dp"
android:clipChildren="false"
android:gravity="center_horizontal"
android:layerType="software"
android:orientation="horizontal"
android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="110dp"
android:layout_marginRight="110dp"
android:clipChildren="false"
/android.support.v4.view.ViewPager
/LinearLayout
Java代码部分:
// 1.设置幕后item的缓存数目
mViewPager.setOffscreenPageLimit(3);
// 2.设置页与页之间的间距
mViewPager.setPageMargin(10);
// 3.将父类的touch事件分发至viewPgaer,否则只能滑动中间的一个view对象
container.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return mViewPager.dispatchTouchEvent(event);
}
});
android系统里的“gallery”指的是图库相册。
gallery 表示:n. 画廊;走廊;旁听席;地道;vt. 在…修建走廊;在…挖地道;vi. 挖地道
相关短语
1、art gallery 美术馆;画廊
2、photo gallery 图片库
3、picture gallery 画馆;美术馆
扩展资料:
近义词:n. 画廊;走廊;旁听席;地道 hall、passage、corridor、underground、subway
gallery 来自拉丁语Galilaea, 现巴勒斯坦地名Galilee,原指位于Galilee的教堂门廊,走廊。
双语例句
1、Before we go to the gallery.
在我们去画廊之前。
2、Is this your gallery?
这是你的画廊吗?
3、So what did dad have to do at the gallery.
那么其实爸爸要去画廊做什么?
下面上代码,相关解释都放在代码里了。
1、建立一个新项目HelloGallery。
2、拷贝wallpaper_0.jpg…wallpaper_9.jpg 10个图片文件到res/drawable目录。
3、res/layout/main.xml文件的内容如下:
XML/HTML代码
?xml version="1.0" encoding="utf-8"?
framelayout android:layout_height="fill_parent" android:layout_width="fill_parent" xmlns:android="" android:id="@+id/FrameLayout01"
imageview android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@+id/ImageView01" android:src="@drawable/wallpaper_0"
/imageview
gallery android:layout_height="wrap_content" android:layout_width="fill_parent" xmlns:android="" android:id="@+id/Gallery01" android:spacing="5dp"
/gallery
/framelayout
其中我们使用FrameLayout来实现叠加效果,使用ImageView来显示大图,Gallery来展示画廊,android:spacing="5dp" 属性则是用来设置元素之间的间隔。
4、在res/values/目录中新建一个attrs.xml内容如下:
XML/HTML代码
?xml version="1.0" encoding="UTF-8"?
resources
declare -styleable="" name="HelloGallery"
attr name="android:galleryItemBackground"
/attr/declare
/resources
5、在MainHelloGallery.java中的内容如下:
Java代码
package android.basic.lesson13;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Toast;
public class MainHelloGallery extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//定义UI组件
final ImageView iv= (ImageView)findViewById(R.id.ImageView01);
Gallery g = (Gallery) findViewById(R.id.Gallery01);
//设置图片匹配器
g.setAdapter(new ImageAdapter(this));
//设置AdapterView点击监听器,Gallery是AdapterView的子类
g.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView? parent, View view,
int position, long id) {
//显示点击的是第几张图片
Toast.makeText(MainHelloGallery.this, "" + position,
Toast.LENGTH_LONG).show();
//设置背景部分的ImageView显示当前Item的图片
iv.setImageResource(((ImageView)view).getId());
}
});
}
//定义继承BaseAdapter的匹配器
public class ImageAdapter extends BaseAdapter {
//Item的修饰背景
int mGalleryItemBackground;
//上下文对象
private Context mContext;
//图片数组
private Integer[] mImageIds = { R.drawable.wallpaper_0,
R.drawable.wallpaper_1, R.drawable.wallpaper_2,
R.drawable.wallpaper_3, R.drawable.wallpaper_4,
R.drawable.wallpaper_5, R.drawable.wallpaper_6,
R.drawable.wallpaper_7, R.drawable.wallpaper_8,
R.drawable.wallpaper_9 };
//构造方法
public ImageAdapter(Context c){
mContext = c;
//读取styleable资源
TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = a.getResourceId(
R.styleable.HelloGallery_android_galleryItemBackground, 0);
a.recycle();
}
//返回项目数量
@Override
public int getCount() {
return mImageIds.length;
}
//返回项目
@Override
public Object getItem(int position) {
return position;
}
//返回项目Id
@Override
public long getItemId(int position) {
return position;
}
//返回视图
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv = new ImageView(mContext);
iv.setImageResource(mImageIds[position]);
//给生成的ImageView设置Id,不设置的话Id都是-1
iv.setId(mImageIds[position]);
iv.setLayoutParams(new Gallery.LayoutParams(120, 160));
iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setBackgroundResource(mGalleryItemBackground);
return iv;
}
}
}