http://www.ophonesdn.com/forum/thread-2918-1-1.html
android 封装一个view模块
android 的UI设计有所见即所得的空间可用,设计UI的时候非常方便。我们在设计UI的时候也应该尽量复用,以提高效率。如整个页面都相同,或只是LIST的内容显示不同,我们应该使用同一个页面,而不应该配置多个页面。但如果只有页面的一部分内容相同,我们又不能公用整个页面,该怎么办呢?
我们可以对这个模块进行封装,只要在该使用的地方把它引入即可。看个封装gallery的小例子。
1.封装gallery的类:
package com.D_galleryPackage;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.AdapterView.OnItemClickListener;
public class GalleryLayout extends LinearLayout implements OnClickListener, OnItemClickListener{
private Context mContext;
private ImageView pre, next;
private Gallery mGallery;
private int FILL = ViewGroup.LayoutParams.FILL_PARENT;
private int WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT;
private List<Integer> myimage = new ArrayList<Integer>();
public GalleryLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}
public void updateUI(){
myimage.add(R.drawable.coupons_new);
myimage.add(R.drawable.profile_ad_icon_new);
myimage.add(R.drawable.profile_menu_icon_new);
myimage.add(R.drawable.save_icon_new);
myimage.add(R.drawable.video_icon_new);
pre = new ImageView(mContext);
pre.setImageDrawable(getResources().getDrawable(R.drawable.map_point_back));
next = new ImageView(mContext);
next.setImageDrawable(getResources().getDrawable(R.drawable.map_point_forward));
mGallery = new Gallery(mContext, null);
ImageAdapter adapter = new ImageAdapter(mContext);
mGallery.setAdapter(adapter);
mGallery.setLayoutParams(new LayoutParams(FILL, WRAP_CONTENT, 1));
setGallerySelection(mGallery);
pre.setOnClickListener(this);
next.setOnClickListener(this);
mGallery.setOnItemClickListener(this);
setGravity(Gravity.CENTER);
addView(pre);
addView(mGallery);
addView(next);
}
private void setGallerySelection(Gallery gallery) {
if(myimage.size() >=2){
gallery.setSelection(1);
}
}
@Override
public void onClick(View v) {
if(v == pre){
int id = (int) mGallery.getSelectedItemId();
if(id > 0 ){
Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.push_left_in);
mGallery.setAnimation(animation);
mGallery.setAnimationCacheEnabled(true);
mGallery.setSelection(--id, true);
}
}else if (v == next) {
int id = (int) mGallery.getSelectedItemId();
if(id < (myimage.size() -1)){
mGallery.setSelection(++id, true);
}
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
new AlertDialog.Builder(mContext).setMessage(String.valueOf(position)).setTitle("gallery Click event").setPositiveButton("==OK==", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
public class ImageAdapter extends BaseAdapter{
private Context myContext;
public ImageAdapter(Context c)
{
myContext = c;
}
@Override
public int getCount() {
return myimage.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView tv = new ImageView(myContext);
tv.setImageDrawable(getResources().getDrawable(myimage.get(position)));
tv.setPadding(20, 10, 29, 10);
tv.setLayoutParams(new Gallery.LayoutParams(WRAP_CONTENT, WRAP_CONTENT ));
return tv;
}
}
}
2.UI中引入:
<com.D_galleryPackage.GalleryLayout
android:layout_gravity="center"
android:clickable="false"
android:focusable="false"
android:l
android:id="@+id/galleryLayout"
android:layout_height="75dip"
android:layout_width="fill_parent"
android:background="#fff" />
3.代码中(要使用gallery的地方,和UI搭配)调用:
galleryLayout = (GalleryLayout) findViewById(R.id.galleryLayout);
galleryLayout.updateUI();
分享到:
相关推荐
"kotlin对activity和Fragment的简单封装"这个主题主要探讨了如何利用Kotlin的特性优化Android应用中的Activity和Fragment的管理,提高代码的可读性和可维护性。以下是关于这个主题的详细知识点: 1. **Kotlin的扩展...
在Android应用开发中,Activity是构成应用程序的基本组件之一,它代表了用户可见并可以与之交互的屏幕。Activity之间的调用是Android应用中常见的功能,用于实现不同界面间的跳转和数据传递。本主题将深入讲解...
至于布局,当在Unity中调用Android Activity时,你可以在这个Activity中加载自定义的XML布局文件。在Android的Activity中,通常会在`onCreate()`方法中使用`setContentView()`来设置布局。例如: ```java @Override...
本文将深入探讨启动加载广告的思路,并讲解如何对广告View进行封装,以便于自定义设置广告内容和样式。 一、启动广告的原理与实现 启动广告的核心是控制广告在应用启动时的展示时机。一般而言,广告会在应用主界面...
在描述中提到的“只需要调用一个方法”,这通常意味着开发者对支付宝SDK进行了封装,将上述流程中的复杂步骤整合到了一个简便的调用中。下面我们将详细解释这个方法的实现。 1. **创建支付工具类**: 创建一个名为`...
4. **Activity或Fragment的封装**:创建一个BaseActivity或BaseFragment,实现View接口,并持有Presenter的实例。在这个基类中,我们可以设置Presenter的生命周期管理,如在onCreate中初始化Presenter,在onDestroy...
最后,为了让这个功能在整个应用程序中统一,可以考虑将滑动销毁逻辑封装成一个库或者基类Activity,其他Activity继承自这个基类。这样,只需简单配置,所有Activity都能拥有相同的滑动销毁功能。 在...
PopupWindow在Android开发中是一个非常实用的组件,它允许开发者创建弹出式窗口,可以悬浮在Activity之上,常用于实现下拉菜单、提示信息、快捷操作等效果。本篇文章将详细探讨如何对PopupWindow进行封装,使其能...
2. **实现View接口**:在Activity或Fragment中,实现契约类中的View接口,定义UI展示和回调方法。 3. **创建Presenter**:创建Presenter类,实现契约类中的Presenter接口,处理业务逻辑。 4. **连接MVP**:在...
在实际开发中,你可能还需要考虑其他因素,如PopupWindow的生命周期管理,尤其是在Activity或Fragment的生命周期变化时,确保PopupWindow得到正确的处理。此外,对于复杂的PopupWindow,可以考虑使用布局文件来定义...
在Android开发中,Activity是应用程序的基本组件,它负责与用户交互并展示UI。当我们谈论“设置Activity的出现方式”时,我们实际上是在讨论如何自定义Activity的启动动画和过渡效果。这涉及到Android的窗口动画...
1. **使用Butter Knife**:这是一个流行的依赖注入库,它可以消除在Activity或Fragment中查找View的需要。只需使用注解在字段上,编译时会自动生成查找并设置View的代码,简化了代码结构,提高了可读性。 2. **...
如果需要在整个应用中保持一致性,可以考虑将动画设置封装到一个公共的基类Activity中,然后让其他所有Activity继承这个基类,这样就不需要在每个Activity中重复设置动画。 通过以上步骤,我们就实现了点击按钮时...
这种方式需要在创建PopupWindow时,先保存对Activity的引用,以便在PopupWindow中调用startActivityForResult()方法。 2. **接口回调**:这是一种常用的方式,通过定义一个接口,让Activity实现该接口,然后在...
首先,Intent在Android中是一个消息对象,它封装了启动一个Activity或者Service所需的信息,包括Action、Data、Category等。Action是Intent的一个关键属性,用来描述Intent要执行的操作,比如ACTION_VIEW、ACTION_...
我们需要在这个方法中计算手指的起始和结束位置,判断滑动方向是否是从屏幕左侧向右侧,并根据滑动距离和速度来决定是否触发退出Activity的操作。 接下来,我们要考虑视图层级管理。在Android中,布局通常由多个...
本教程将详细介绍如何进行`PopupWindow`的简单封装,以便在项目中更方便地使用。 首先,我们来了解`PopupWindow`的基本结构。`PopupWindow`由三部分组成:内容视图(content view)、背景(background)和锚点...
这些方法可以方便地在其他Activity中调用,改变TopBar的状态。 二、属性封装 1. 使用 Attrs:在`res/values/attrs.xml`文件中,定义自定义TopBar所需的属性,例如标题文字颜色、背景色、字体大小等。 2. 创建...
6. **实现View接口**:在Activity或Fragment中实现,调用Presenter的方法,并处理数据显示和加载更多事件。 7. **连接Presenter和View**:在Activity或Fragment的onCreate()方法中实例化Presenter,并将自身(即View...
本篇将详细介绍如何进行RecyclerView适配器的封装,以及如何在活动中或碎片中操作这个列表。 首先,RecyclerView的核心是它的适配器(Adapter)。适配器负责将数据源(如ArrayList)与视图(ViewHolder)关联起来,...