创建自定义视图类的问题:Android

时间:2013-05-09 13:31:42

标签: android animation view

好的,这个问题可能听起来很幼稚,但我从来没有能够从这个问题的可靠来源找到答案。

我有一个复杂的观点,我正在从XML中膨胀。我还有很多与该视图相关的动作和属性。此外,视图是复杂列表的一部分。目前,我正在从XML中扩展视图并在MainActivity中执行所有操作。但是,这种复杂的代码并不是一个公平的设计策略。

所以,我尝试使用谷歌搜索来封装View类中的膨胀视图,并提出了以下设计:

public class FeedView extends LinearLayout {

    Feed feed;
    SlideAnimation inAnimation;
    SlideAnimation outAnimation;
    View view;
    boolean isViewExpanded;
    List<Article> articleList;

    public boolean isViewExpanded() {
        return isViewExpanded;
    }

    public void setViewExpanded(boolean isViewExpanded) {
        this.isViewExpanded = isViewExpanded;
    }

    public FeedView(Context context, Feed feed) {
        super(context);
        this.feed = feed;
        isViewExpanded = false;
        init();

    }

    private void init() {
        LayoutInflater mInflater = LayoutInflater.from(getContext());
        view = mInflater.inflate(R.layout.collapsed_feed, this, true);

        TextView feed_name = (TextView) view.findViewById(R.id.feed_name);
        feed_name.setText(feed.feed_name);

        ImageView feed_image = (ImageView) view.findViewById(R.id.feed_image);
        String image_url = feed.feed_image_url;
        ImageLoaderForFeeds imgLoaderForFeeds = new ImageLoaderForFeeds(getContext());

        imgLoaderForFeeds.DisplayImage(image_url, feed_image);

        if (feed.isFavourite)
        {
            TextView tv_add_to_favourite = (TextView) view.findViewById(R.id.tv_add_to_favourite);
            ImageView iv_add_to_favourite = (ImageView) view.findViewById(R.id.img_add_to_favourite);
            tv_add_to_favourite.setText(R.string.remove_from_favourite);
            tv_add_to_favourite.setTextColor(Color.GRAY);
            iv_add_to_favourite.setSelected(true);
        }

        RelativeLayout favourite_bar = (RelativeLayout) view.findViewById(R.id.add_to_favourite);
        String tag = "FAVOURITE";
        favourite_bar.setTag(tag);
    }

    public void toggleView(int length) {
        if (!isViewExpanded)
            expandView(length);
        else
            collapseView();
    }


    private void expandView(int length) {

    }

    public void collapseView() {

    }

    public List<Article> getArticleList() {
        return articleList;
    }

    public void setArticleList(List<Article> articleList) {
        this.articleList = articleList;
    }

    private void showArticleList() {

    }

问题:我是否正确设计此课程?在我正在做的视图类中扩展XML是否可以。如果是的话,我是在正确的地方做的吗?还建议如果是更好的设计来实现这一点!

当我想出这门课时,我也遇到了一些问题,但我想这可能与之前的问题有关。

问题#1:有时我会在使用findViewById()查找FeedView时发出问题,虽然正确设置了ID,但它会返回null。

问题#2:在动画FeedView类上,它会意外响应并出现几个尺寸缺陷。不知道为什么!

0 个答案:

没有答案