【第22期】观点:IT 行业加班,到底有没有价值?

scrollview实现美团商家详情的导航栏渐变效果

原创 2016年05月30日 23:27:56

第一次在博客上分享我的经验,虽然是拿大神的代码改的一些东西但是自己也是思考了的,也算是小小的进步吧.在此把代码贴出来希望对你们有帮助.关于scrollview的详细介绍及美团的悬浮框设计请参照http://blog.csdn.net/xiaanming/article/details/17374599点击打开链接.这个列子的主要实现思路是,通scrollview的onscroll方法获取控件滑动的scroll Y,通过设置scroll Y和控件透明度的函数关系来实现导航栏中的按钮和文字显示隐藏的渐变效果.不多说了直接上代码吧.

一,布局界面

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <net.lhsoft.wifi.view.MyScrollView
        android:id="@+id/scrollView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal">

            <com.loopj.android.image.SmartImageView
                android:id="@+id/picUrls"
                android:layout_width="fill_parent"
                android:layout_height="180dp" />


            <TextView
                android:id="@+id/pic"
                android:layout_width="30dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="300dp"
                android:layout_marginTop="100dp"
                android:background="#8f000000"
                android:text="28"
                android:textColor="@color/white" />

            <include
                android:id="@+id/buy"
                layout="@layout/buy_layout"
                android:layout_marginLeft="10dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/picUrls" />

            <WebView
                android:id="@+id/web"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/buy"
                 />
        </RelativeLayout>

    </net.lhsoft.wifi.view.MyScrollView>
    <LinearLayout
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@null"
        >
        <ImageView
            android:id="@+id/rt"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_margin="10dp"
            android:clickable="true"
            android:src="@drawable/fanhui" />
        <TextView
            android:id="@+id/name"
            android:layout_width="220dp"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_margin="10dp"
            android:textSize="20dp"/>
        <ImageView
            android:id="@+id/sc"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_marginLeft="230dp"
            android:layout_marginTop="10dp"
            android:src="@drawable/xiangqing_icon"
            android:visibility="gone" />

        <ImageView
            android:layout_weight="1"
            android:id="@+id/collect"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="10dp"
            android:src="@drawable/xiangqing_icon" />
    </LinearLayout>
</FrameLayout>
二,新建一个MyScrollView
package net.lhsoft.wifi.view;

import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;

/**
 * Created by feynman on 2016/5/26.
 */
public class MyScrollView extends ScrollView {
    private OnScrollListener onScrollListener;

    public MyScrollView(Context context) {
        this(context, null);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    /**
     * 设置滚动接口
     * @param onScrollListener
     */
    public void setOnScrollListener(OnScrollListener onScrollListener) {
        this.onScrollListener = onScrollListener;
    }


    @Override
    public int computeVerticalScrollRange() {
        return super.computeVerticalScrollRange();
    }


    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if(onScrollListener != null){
            onScrollListener.onScroll(t);
        }
    }



    /**
     *
     * 滚动的回调接口
     *
     * @author xiaanming
     *
     */
    public interface OnScrollListener{
        /**
         * 回调方法, 返回MyScrollView滑动的Y方向距离
         * @param scrollY
         *                       */
        public void onScroll(int scrollY);
    }



}
三,主界面
/**
 * Created by feynman on 2016/4/29.
 */
public class DetailsActivity extends Activity implements OnScrollListener {
    private ImageView rt;
    private ImageView collect;
    private SmartImageView picUrls;
    private WebView web;
    private ImageView phone;
    private TextView shop_name;
    private TextView address;
    private TextView pic;
    private TextView name;
    private boolean mbDisplayFlg = false;
    Gson gson;
    /**
     * 自定义的MyScrollView
     */
    private MyScrollView myScrollView;
    /**
     * MyScrollView里面的购买布局
     */
    private RelativeLayout mBuyLayout;
    /**
     * 位于顶部的购买布局
     */
    private RelativeLayout mTopBuyLayout;
    private LinearLayout title;

    @TargetApi(Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_details);
        title = (LinearLayout) findViewById(R.id.title);
        myScrollView = (MyScrollView) findViewById(R.id.scrollView);
        mBuyLayout = (RelativeLayout) findViewById(R.id.buy);
        myScrollView.setOnScrollListener(this);
        shop_name = (TextView) findViewById(R.id.shop_name);
        name = (TextView) findViewById(R.id.name);
//        String shop_name = this.getIntent().getStringExtra("shop_name");
        shop_name.setText(this.getIntent().getStringExtra("shop_name"));
        pic = (TextView) findViewById(R.id.pic);
        String[] pics = (String[]) getIntent().getExtras().get("picUrls");
        pic.setText(pics.length + "" + "");
        address = (TextView) findViewById(R.id.address);
        address.setText(this.getIntent().getStringExtra("prove") +
                this.getIntent().getStringExtra("city") +
                this.getIntent().getStringExtra("dist") +
                this.getIntent().getStringExtra("address"));
        rt = (ImageView) findViewById(R.id.rt);
        collect = (ImageView) findViewById(R.id.collect);
        phone = (ImageView) findViewById(R.id.phone);
        final String phoneNumber = this.getIntent().getStringExtra("phone");
        phone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(Intent.ACTION_DIAL, Uri
                        .parse("tel:" + phoneNumber));
                // 去调用那些可以处理拨号行为的Activity
                startActivity(intent);
            }
        });
        web = (WebView) findViewById(R.id.web);
        WebSettings webSettings = web.getSettings();
        webSettings.setJavaScriptEnabled(true);
        // 创建WebViewClient对象
        WebViewClient wvc = new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // 使用自己的WebView组件来响应Url加载事件,而不是使用默认浏览器器加载页面
                web.loadUrl(url);
                // 消耗掉这个事件。Android中返回True的即到此为止吧,事件就会不会冒泡传递了,我们称之为消耗掉
                return true;
            }
        };
        web.setWebViewClient(wvc);
        String url = this.getIntent().getStringExtra("detailUrl");
        web.loadUrl(url);
        picUrls = (SmartImageView) findViewById(R.id.picUrls);
        final String[] value = (String[]) getIntent().getExtras().get("picUrls");
        picUrls.setImageUrl(value[0]);
        picUrls.setScaleType(ImageView.ScaleType.FIT_XY);
        picUrls.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(DetailsActivity.this, PhotoActivity.class);
                intent.putExtra("value", value);
                startActivity(intent);
            }
        });
        collect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                collectShop();//收藏
            }
        });
        rt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

    }

    public void collectShop() {
        RequestParams params = new RequestParams(ServerSetting.URLS.get("collectShop"));
        params.addQueryStringParameter("uid", BaseApplication.getInstance().getUserBean().getId());
        params.addQueryStringParameter("shopid", this.getIntent().getIntExtra("id", -1) + "");
        params.setHeader(Constants.SESSION_ID_NAME, CommonUtils.getPreferenceString(x.app(), Constants.SESSION_ID_NAME, ""));
        x.http().get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {

                RetData<List<CollectBean>> retData = gson.fromJson(result, new TypeToken<RetData<List<CollectBean>>>() {
                }.getType());
                if (retData.isCode()) {
                    collect.setImageResource(R.drawable.user_icon1);
                    Toast.makeText(DetailsActivity.this, "收藏成功", Toast.LENGTH_LONG).show();
                } else {
                    collect.setImageResource(R.drawable.xiangqing_icon);
                    Toast.makeText(DetailsActivity.this, "取消收藏", Toast.LENGTH_LONG).show();

                }
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                if (mbDisplayFlg) {
                    collect.setImageResource(R.drawable.xiangqing_icon);
                    Toast.makeText(DetailsActivity.this, "取消收藏", Toast.LENGTH_LONG).show();

                } else {

                    collect.setImageResource(R.drawable.user_icon1);
                    Toast.makeText(DetailsActivity.this, "收藏成功", Toast.LENGTH_LONG).show();

                }
                mbDisplayFlg = !mbDisplayFlg;
                collect.postInvalidate();
//                Toast.makeText(x.app(), "请求失败,:" + ex.getMessage(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancelled(CancelledException cex) {
                Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();//取消请求
            }

            @Override
            public void onFinished() {
                CustomProgressDialog.dismissCustomProgressDialog();
            }
        });
    }

    @Override
    public void onScroll(int scrollY) {
        float sc = myScrollView.getScrollY();
        float sc1 = sc / (mBuyLayout.getTop()-title.getHeight());
        if(sc1>1.0){
            sc1= (float) 1.0;

        }else {
            sc1=sc / (mBuyLayout.getTop()-title.getHeight());
        }
        int sc2 = (int) (sc1 * 255);
        if (sc != 0) {
            title.setBackgroundColor(Color.argb(sc2, 255, 255, 255));

            name.setText(this.getIntent().getStringExtra("shop_name"));
        } else {
            title.setBackgroundColor(Color.argb(0, 255, 255, 255


















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































            ));
            rt.setImageResource(R.drawable.fanhui);
            collect.setImageResource(R.drawable.xiangqing_icon);
            name.setText("");
        }if(sc1==1.0){
            rt.setImageResource(R.drawable.fanhui1);
            collect.setImageResource(R.drawable.xiangqing_icon4);
        }

    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Android之scrollview滑动使导航栏渐变背景色

监听scrollview滑动距离渐变导航栏背景色

android标题栏颜色渐变效果的实现(标题栏随着scrollview的滚动而变化)

之前也是在网上看到这种效果,不过是滚动listview来改变标题栏的颜色,感觉那个应用的比较少,比如我要滚动scrollview来实现呢,那么问题就来了,废话少说,看一下要实现的效果先(这是在项目应用...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

ViewPager+gridView仿美团导航

相信大家都用过美团吧,是不是被它的精美的导航页面给迷住!今天,咱们就实现它那个多页面滑动导航效果,话不多说,先上效果图:                                       ...

使用ScrollView做渐变导航栏

前些日子项目要在原来的页面上加入渐变导航栏的功能,查了很多资料,很多资源都是监听到listview的高度来实现渐变导航栏的效果,可是项目里面很多的界面都是使用ScrollView来实现滑动效果。 实...

iOS开发 非常全的三方库、插件、大牛博客等等

UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件。 SVPullToRefresh- 下拉刷新控件。 MJRefresh- 仅需一行代码就可以为UITabl...

Android 对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果

转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming),请尊重他人的辛勤劳

(转)android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

(转)android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表 转载地址:点击打开链接
  • lnn368
  • lnn368
  • 2016-04-21 00:47
  • 6698
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)