`
dfeixtay
  • 浏览: 56998 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

封装view,并在activity中调用(转)

阅读更多

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对activity和Fragment的简单封装"这个主题主要探讨了如何利用Kotlin的特性优化Android应用中的Activity和Fragment的管理,提高代码的可读性和可维护性。以下是关于这个主题的详细知识点: 1. **Kotlin的扩展...

    Activity之间的调用

    在Android应用开发中,Activity是构成应用程序的基本组件之一,它代表了用户可见并可以与之交互的屏幕。Activity之间的调用是Android应用中常见的功能,用于实现不同界面间的跳转和数据传递。本主题将深入讲解...

    Unity调用activity和布局

    至于布局,当在Unity中调用Android Activity时,你可以在这个Activity中加载自定义的XML布局文件。在Android的Activity中,通常会在`onCreate()`方法中使用`setContentView()`来设置布局。例如: ```java @Override...

    启动加载广告思路、广告View封装

    本文将深入探讨启动加载广告的思路,并讲解如何对广告View进行封装,以便于自定义设置广告内容和样式。 一、启动广告的原理与实现 启动广告的核心是控制广告在应用启动时的展示时机。一般而言,广告会在应用主界面...

    Android-支付宝支付SDK的封装只需要调用一个方法

    在描述中提到的“只需要调用一个方法”,这通常意味着开发者对支付宝SDK进行了封装,将上述流程中的复杂步骤整合到了一个简便的调用中。下面我们将详细解释这个方法的实现。 1. **创建支付工具类**: 创建一个名为`...

    mvp封装+baseactivity封装.

    4. **Activity或Fragment的封装**:创建一个BaseActivity或BaseFragment,实现View接口,并持有Presenter的实例。在这个基类中,我们可以设置Presenter的生命周期管理,如在onCreate中初始化Presenter,在onDestroy...

    Android-仿微信滑动销毁activity获取view绘制区域

    最后,为了让这个功能在整个应用程序中统一,可以考虑将滑动销毁逻辑封装成一个库或者基类Activity,其他Activity继承自这个基类。这样,只需简单配置,所有Activity都能拥有相同的滑动销毁功能。 在...

    PopupWindow封装-view上方显示和下方显示

    PopupWindow在Android开发中是一个非常实用的组件,它允许开发者创建弹出式窗口,可以悬浮在Activity之上,常用于实现下拉菜单、提示信息、快捷操作等效果。本篇文章将详细探讨如何对PopupWindow进行封装,使其能...

    通用的MVP框架封装

    2. **实现View接口**:在Activity或Fragment中,实现契约类中的View接口,定义UI展示和回调方法。 3. **创建Presenter**:创建Presenter类,实现契约类中的Presenter接口,处理业务逻辑。 4. **连接MVP**:在...

    封装PopupWindow(1)

    在实际开发中,你可能还需要考虑其他因素,如PopupWindow的生命周期管理,尤其是在Activity或Fragment的生命周期变化时,确保PopupWindow得到正确的处理。此外,对于复杂的PopupWindow,可以考虑使用布局文件来定义...

    android中设置activity的出现方式

    在Android开发中,Activity是应用程序的基本组件,它负责与用户交互并展示UI。当我们谈论“设置Activity的出现方式”时,我们实际上是在讨论如何自定义Activity的启动动画和过渡效果。这涉及到Android的窗口动画...

    listview封装

    1. **使用Butter Knife**:这是一个流行的依赖注入库,它可以消除在Activity或Fragment中查找View的需要。只需使用注解在字段上,编译时会自动生成查找并设置View的代码,简化了代码结构,提高了可读性。 2. **...

    android点击按钮实现多个Activity滑动切换

    如果需要在整个应用中保持一致性,可以考虑将动画设置封装到一个公共的基类Activity中,然后让其他所有Activity继承这个基类,这样就不需要在每个Activity中重复设置动画。 通过以上步骤,我们就实现了点击按钮时...

    Android PopupWindow与Activity之间的数据传递.zip

    这种方式需要在创建PopupWindow时,先保存对Activity的引用,以便在PopupWindow中调用startActivityForResult()方法。 2. **接口回调**:这是一种常用的方式,通过定义一个接口,让Activity实现该接口,然后在...

    Android Activity设置相同的action进行判断源码.rar

    首先,Intent在Android中是一个消息对象,它封装了启动一个Activity或者Service所需的信息,包括Action、Data、Category等。Action是Intent的一个关键属性,用来描述Intent要执行的操作,比如ACTION_VIEW、ACTION_...

    Android-Android实现了可以滑动左侧边缘退出Activity的功能

    我们需要在这个方法中计算手指的起始和结束位置,判断滑动方向是否是从屏幕左侧向右侧,并根据滑动距离和速度来决定是否触发退出Activity的操作。 接下来,我们要考虑视图层级管理。在Android中,布局通常由多个...

    popwindow的简单封装

    本教程将详细介绍如何进行`PopupWindow`的简单封装,以便在项目中更方便地使用。 首先,我们来了解`PopupWindow`的基本结构。`PopupWindow`由三部分组成:内容视图(content view)、背景(background)和锚点...

    自定义TopBar和属性封装

    这些方法可以方便地在其他Activity中调用,改变TopBar的状态。 二、属性封装 1. 使用 Attrs:在`res/values/attrs.xml`文件中,定义自定义TopBar所需的属性,例如标题文字颜色、背景色、字体大小等。 2. 创建...

    MVP简单封装

    6. **实现View接口**:在Activity或Fragment中实现,调用Presenter的方法,并处理数据显示和加载更多事件。 7. **连接Presenter和View**:在Activity或Fragment的onCreate()方法中实例化Presenter,并将自身(即View...

    recyclerview 适配器封装

    本篇将详细介绍如何进行RecyclerView适配器的封装,以及如何在活动中或碎片中操作这个列表。 首先,RecyclerView的核心是它的适配器(Adapter)。适配器负责将数据源(如ArrayList)与视图(ViewHolder)关联起来,...

Global site tag (gtag.js) - Google Analytics