精华内容
下载资源
问答
  • 仿QQ空间背景图片动态循环滚动效果源码,源码CloudImageView,该效果有点像3d的效果的,非常炫的滚动的效果的,打算做一个比较炫的背景循环的效果的朋友可以了解一下吧。
  • HTML5 QQ登录背景动态图片 原文:HTML5 QQ登录背景动态图片预览效果如图所示: 代码如下: <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; ...
    原文:HTML5 QQ登录背景动态图片

    预览效果如图所示:

     

    代码如下:

    <!DOCTYPE html> 
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>html5背景</title>
        
        <style type="text/css">
        *{margin:0;padding:0;list-style-type:none;}
        a,img{border:0;}
        </style>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
    </head>
    <body>
    <div id="container" style="width:100%;height:700px;">
        <div id="anitOut"></div>
    </div>
    
    
    <script type="text/javascript">
    $(function () {
        if (!window.ActiveXObject && !!document.createElement("canvas").getContext) {
            $.getScript("http://im-img.qq.com/pcqq/js/200/cav.js?_=1428576021379",
                    function () {
                        var t = {
                            width: 1.5,
                            height: 1.5,
                            depth: 10,
                            segments: 12,
                            slices: 6,
                            xRange: 0.8,
                            yRange: 0.1,
                            zRange: 1,
                            ambient: "#525252",
                            diffuse: "#FFFFFF",
                            speed: 0.0002
                        };
                        var G = {
                            count: 2,
                            xyScalar: 1,
                            zOffset: 100,
                            ambient: "#002c4a",
                            diffuse: "#005584",
                            speed: 0.001,
                            gravity: 1200,
                            dampening: 0.95,
                            minLimit: 10,
                            maxLimit: null,
                            minDistance: 20,
                            maxDistance: 400,
                            autopilot: false,
                            draw: false,
                            bounds: CAV.Vector3.create(),
                            step: CAV.Vector3.create(Math.randomInRange(0.2, 1), Math.randomInRange(0.2, 1), Math.randomInRange(0.2, 1))
                        };
                        var m = "canvas";
                        var E = "svg";
                        var x = {
                            renderer: m
                        };
                        var i, n = Date.now();
                        var L = CAV.Vector3.create();
                        var k = CAV.Vector3.create();
                        var z = document.getElementById("container");
                        var w = document.getElementById("anitOut");
                        var D, I, h, q, y;
                        var g;
                        var r;
    
                        function C() {
                            F();
                            p();
                            s();
                            B();
                            v();
                            K(z.offsetWidth, z.offsetHeight);
                            o()
                        }
    
                        function F() {
                            g = new CAV.CanvasRenderer();
                            H(x.renderer)
                        }
    
                        function H(N) {
                            if (D) {
                                w.removeChild(D.element)
                            }
                            switch (N) {
                                case m:
                                    D = g;
                                    break
                            }
                            D.setSize(z.offsetWidth, z.offsetHeight);
                            w.appendChild(D.element)
                        }
    
                        function p() {
                            I = new CAV.Scene()
                        }
    
                        function s() {
                            I.remove(h);
                            D.clear();
                            q = new CAV.Plane(t.width * D.width, t.height * D.height, t.segments, t.slices);
                            y = new CAV.Material(t.ambient, t.diffuse);
                            h = new CAV.Mesh(q, y);
                            I.add(h);
                            var N, O;
                            for (N = q.vertices.length - 1; N >= 0; N--) {
                                O = q.vertices[N];
                                O.anchor = CAV.Vector3.clone(O.position);
                                O.step = CAV.Vector3.create(Math.randomInRange(0.2, 1), Math.randomInRange(0.2, 1), Math.randomInRange(0.2, 1));
                                O.time = Math.randomInRange(0, Math.PIM2)
                            }
                        }
    
                        function B() {
                            var O, N;
                            for (O = I.lights.length - 1; O >= 0; O--) {
                                N = I.lights[O];
                                I.remove(N)
                            }
                            D.clear();
                            for (O = 0; O < G.count; O++) {
                                N = new CAV.Light(G.ambient, G.diffuse);
                                N.ambientHex = N.ambient.format();
                                N.diffuseHex = N.diffuse.format();
                                I.add(N);
                                N.mass = Math.randomInRange(0.5, 1);
                                N.velocity = CAV.Vector3.create();
                                N.acceleration = CAV.Vector3.create();
                                N.force = CAV.Vector3.create()
                            }
                        }
    
                        function K(O, N) {
                            D.setSize(O, N);
                            CAV.Vector3.set(L, D.halfWidth, D.halfHeight);
                            s()
                        }
    
                        function o() {
                            i = Date.now() - n;
                            u();
                            M();
                            requestAnimationFrame(o)
                        }
    
                        function u() {
                            var Q, P, O, R, T, V, U, S = t.depth / 2;
                            CAV.Vector3.copy(G.bounds, L);
                            CAV.Vector3.multiplyScalar(G.bounds, G.xyScalar);
                            CAV.Vector3.setZ(k, G.zOffset);
                            for (R = I.lights.length - 1; R >= 0; R--) {
                                T = I.lights[R];
                                CAV.Vector3.setZ(T.position, G.zOffset);
                                var N = Math.clamp(CAV.Vector3.distanceSquared(T.position, k), G.minDistance, G.maxDistance);
                                var W = G.gravity * T.mass / N;
                                CAV.Vector3.subtractVectors(T.force, k, T.position);
                                CAV.Vector3.normalise(T.force);
                                CAV.Vector3.multiplyScalar(T.force, W);
                                CAV.Vector3.set(T.acceleration);
                                CAV.Vector3.add(T.acceleration, T.force);
                                CAV.Vector3.add(T.velocity, T.acceleration);
                                CAV.Vector3.multiplyScalar(T.velocity, G.dampening);
                                CAV.Vector3.limit(T.velocity, G.minLimit, G.maxLimit);
                                CAV.Vector3.add(T.position, T.velocity)
                            }
                            for (V = q.vertices.length - 1; V >= 0; V--) {
                                U = q.vertices[V];
                                Q = Math.sin(U.time + U.step[0] * i * t.speed);
                                P = Math.cos(U.time + U.step[1] * i * t.speed);
                                O = Math.sin(U.time + U.step[2] * i * t.speed);
                                CAV.Vector3.set(U.position, t.xRange * q.segmentWidth * Q, t.yRange * q.sliceHeight * P, t.zRange * S * O - S);
                                CAV.Vector3.add(U.position, U.anchor)
                            }
                            q.dirty = true
                        }
    
                        function M() {
                            D.render(I)
                        }
    
                        function J(O) {
                            var Q, N, S = O;
                            var P = function (T) {
                                for (Q = 0, l = I.lights.length; Q < l; Q++) {
                                    N = I.lights[Q];
                                    N.ambient.set(T);
                                    N.ambientHex = N.ambient.format()
                                }
                            };
                            var R = function (T) {
                                for (Q = 0, l = I.lights.length; Q < l; Q++) {
                                    N = I.lights[Q];
                                    N.diffuse.set(T);
                                    N.diffuseHex = N.diffuse.format()
                                }
                            };
                            return {
                                set: function () {
                                    P(S[0]);
                                    R(S[1])
                                }
                            }
                        }
    
                        function v() {
                            window.addEventListener("resize", j)
                        }
    
                        function A(N) {
                            CAV.Vector3.set(k, N.x, D.height - N.y);
                            CAV.Vector3.subtract(k, L)
                        }
    
                        function j(N) {
                            K(z.offsetWidth, z.offsetHeight);
                            M()
                        }
    
                        C();
                    })
        } else {
            alert('调用cav.js失败');
        }
    });
    </script>
    </body>
    </html>

     

    posted on 2018-08-28 10:29 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/9546536.html

    展开全文
  • 仿QQ空间背景图片动态循环滚动效果源码,源码CloudImageView,该效果有点像3d的效果的,非常炫的滚动的效果的,打算做一个比较炫的背景循环的效果的朋友可以了解一下吧。   
  • 效果图片: 1, 自定义视频类 继承VideoView package com.bw.movie.qqbg; import android.content.Context; import android.media.MediaPlayer; import android.util.AttributeSet; import android.view.KeyEvent; ...

    效果图片:

    在这里插入图片描述

    1, 自定义视频类 继承VideoView

    
    public class CustomVideoView extends VideoView {
        public CustomVideoView(Context context) {
            super(context);
        }
    
        public CustomVideoView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            //我们重新计算高度
            int width = getDefaultSize(0, widthMeasureSpec);
            int height = getDefaultSize(0, heightMeasureSpec);
            setMeasuredDimension(width, height);
    
        }
    
        @Override
        public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
            super.setOnPreparedListener(l);
        }
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            return super.onKeyDown(keyCode, event);
        }
    }
    

    2.主页面代码

    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private CustomVideoView videoview;
        private Button btn_enter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
        }
    
    
        /**
         * 初始化
         */
        private void initView() {
            btn_enter = (Button) findViewById(R.id.btn_enter);
            btn_enter.setOnClickListener(this);
    
            videoview = (CustomVideoView) findViewById(R.id.videoview);
            videoview.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.kk));
    
            //播放
            videoview.start();
            //循环播放
            videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mediaPlayer) {
                    videoview.start();
                    mediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                        @Override
                        public boolean onInfo(MediaPlayer mp, int what, int extra) {
                            return false;
                        }
                    });
                }
            });
    
        }
    
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_enter:
                    Toast.makeText(this,"登录成功了",Toast.LENGTH_SHORT).show();
                    break;
            }
        }
        //返回重启加载
        @Override
        protected void onRestart() {
            super.onRestart();
            initView();
        }
    
        //防止锁屏或者切出的时候,音乐在播放
        @Override
        protected void onStop() {
            super.onStop();
            videoview.stopPlayback();
        }
    
    
    }
    
    

    3.布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <!--CustomVideoView 自定义视频类的位置-->
        <com.bw.movie.qqbg.CustomVideoView
            android:id="@+id/videoview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="top"
            android:orientation="vertical">
    
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="38dp"
                android:layout_marginRight="38dp"
                android:layout_marginTop="70dp"
                android:orientation="vertical">
    
    
                <EditText
                    android:id="@+id/et_phone"
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:layout_gravity="center_vertical"
                    android:background="@null"
                    android:digits="0123456789"
                    android:gravity="center_vertical"
                    android:hint="请输入手机号"
                    android:inputType="number"
                    android:maxLength="11"
                    android:maxLines="1"
                    android:paddingLeft="5dp"
                    android:textColor="@android:color/white"
                    android:textColorHint="@android:color/white"
                    android:textSize="18sp"/>
    
    
                <View
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:layout_alignParentBottom="true"
                    android:background="#000"/>
    
                <EditText
                    android:id="@+id/et_pwd"
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:layout_marginTop="20dp"
                    android:background="@null"
                    android:gravity="center_vertical"
                    android:hint="请输入密码"
                    android:inputType="textPassword"
                    android:maxLength="11"
                    android:maxLines="1"
                    android:paddingLeft="5dp"
                    android:textColor="@android:color/white"
                    android:textColorHint="@android:color/white"
                    android:textSize="18sp"/>
    
                <View
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:layout_alignParentBottom="true"
                    android:background="#000"/>
    
            </LinearLayout>
    
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="23dp"
                android:layout_marginRight="23dp"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/tv_register"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:padding="15dp"
                    android:text="快速注册"
                    android:textColor="#59f406"/>
    
                <TextView
                    android:id="@+id/tv_find_pwd"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:layout_alignParentTop="true"
                    android:gravity="right"
                    android:padding="15dp"
                    android:text="忘记密码?"
                    android:textColor="#59f406"/>
    
            </RelativeLayout>
    
    
            <Button
                android:id="@+id/btn_enter"
                style="?android:attr/borderlessButtonStyle"
                android:layout_width="match_parent"
                android:layout_height="45dp"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                android:layout_marginTop="20dp"
                android:background="#413030"
                android:text="登录"
                android:textColor="#fff"
                android:textSize="18dp"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:paddingBottom="30dp"
            android:orientation="vertical">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="90dp"
                android:gravity="center"
                android:text="使用第三方登录"
                android:textColor="#fff"
                android:textSize="16dp"
                android:visibility="visible"/>
    
           <!-- <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:orientation="horizontal">
    
    
                <ImageView
                    android:id="@+id/iv_wechat"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:padding="10dp"
                    android:src="@drawable/ic_launcher_foreground"/>
    
                <ImageView
                    android:id="@+id/iv_qq"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dp"
                    android:layout_marginTop="10dp"
                    android:padding="10dp"
                    android:src="@drawable/ic_launcher_foreground"/>
    
    
            </LinearLayout>-->
    
        </LinearLayout>
    
    
    </FrameLayout>
    

    在这里插入图片描述
    4.注意:

    视频资源要添加res文件夹下创建raw文件夹
    需要在onRestart()方法里重新加载视频,防止退出返回时视频黑屏
    需要资源图片可留言
    

    好了,到这里效果就实现了

    展开全文
  • 我在代码里面写的是: pagefactory.setBgBitmap(BitmapFactory....修改了背景图片 但是我发现这样不能解决问题,因为图片只显示一部分在左上角怎么才可以让其显示在全屏,还有就是怎么样可以让我的app让腾讯qq可以调用
  • 共有10个三角形背景图片,要求把10个背景图片组合成一个大的六边形背景图片 ...每个小的三角形背景图片正中间有文字显示,且这些文字是动态变化的(文字来源——数据库中查询所得) 求解,多谢。联系qq:787457074
  • QQ的个人信息页面上方有个背景图片,当我们下拉整个页面时,这个背景图会随着拖动距离而变大。下面通过样例演示这个效果如何实现。1,效果图当下拉页面时,背景图片会随着偏移量的增加而放大。 2,样例代码实现...

    在 QQ的个人信息页面上方有个背景图片,当我们下拉整个页面时,这个背景图会随着拖动距离而变大。下面通过样例演示这个效果如何实现。

    1,效果图

    当下拉页面时,背景图片会随着偏移量的增加而放大。

    3bc0416349e9a29aa57f77e4cb6c8e07.png    

    c4e866380ab5b7fd82b799658167a41a.png    

    e87d497cf4a5ba2f242661cb51d96202.png

    2,样例代码

    实现方法是在滚动视图(scrollView)的 scrollViewDidScroll响应方法中获取偏移量,并根据偏移量来动态改变 imageView的位置和尺寸。

    import UIKit

    class ViewController: UIViewController {

    let screenWidth = UIScreen.main.bounds.width // 屏幕宽度

    let screenHeight = UIScreen.main.bounds.height // 屏幕高度

    var imageView: UIImageView! // 图片视图

    let imageViewHeight: CGFloat = 200 // 图片默认高度

    var tableView: UITableView! //表格视图

    let rowNumber = 50 // 表格数据条目数

    let rowHeight: CGFloat = 40 // 表格行高

    override func viewDidLoad() {

    super.viewDidLoad()

    // 首先创建一个滚动视图,图片还是tableView都放在这个滚动视图中

    let scrollView = UIScrollView()

    scrollView.frame = self.view.frame

    scrollView.contentSize = CGSize(width: screenWidth,

    height: CGFloat(rowNumber) * rowHeight + imageViewHeight)

    scrollView.contentInsetAdjustmentBehavior = .never

    scrollView.delegate = self

    self.view.addSubview(scrollView)

    // 初始化图片视图

    self.imageView = UIImageView()

    self.imageView.frame = CGRect(x: 0, y: 0, width: screenWidth,

    height: imageViewHeight)

    self.imageView.image = UIImage(named: "bg.jpeg")

    self.imageView.contentMode = .scaleAspectFill

    scrollView.addSubview(self.imageView)

    //创建表视图

    self.tableView = UITableView(frame: CGRect(x: 0, y: imageViewHeight,

    width: screenWidth, height: CGFloat(rowNumber) * rowHeight), style:.plain)

    self.tableView.delegate = self

    self.tableView.dataSource = self

    self.tableView.rowHeight = CGFloat(rowHeight)

    self.tableView.isScrollEnabled = false

    //创建一个重用的单元格

    self.tableView!.register(UITableViewCell.self,

    forCellReuseIdentifier: "SwiftCell")

    scrollView.addSubview(self.tableView!)

    }

    }

    extension ViewController: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {

    //获取偏移量

    let offset = scrollView.contentOffset.y

    // 改变图片大小

    if offset <= 0 {

    self.imageView.frame = CGRect(x: 0, y: offset, width: screenWidth,

    height: imageViewHeight - offset)

    }

    }

    }

    extension ViewController: UITableViewDelegate, UITableViewDataSource {

    //在本例中,有1个分区

    func numberOfSections(in tableView: UITableView) -> Int {

    return 1

    }

    //返回表格行数(也就是返回控件数)

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)

    -> Int {

    return rowNumber

    }

    //创建各单元显示内容(创建参数indexPath指定的单元)

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)

    -> UITableViewCell {

    //为了提供表格显示性能,已创建完成的单元需重复使用

    let identify:String = "SwiftCell"

    //同一形式的单元格重复使用,在声明时已注册

    let cell = tableView.dequeueReusableCell(

    withIdentifier: identify, for: indexPath)

    cell.textLabel?.text = "数据条目:\(indexPath.row + 1)"

    return cell

    }

    }

    功能改进:增加导航栏

    1,效果图

    (1)我们在上面样例的基础上增加一个导航栏,不过默认情况下导航栏不可见。而下拉时背景图片放大效果同之前的一样。

    3bc0416349e9a29aa57f77e4cb6c8e07.png    

    c4e866380ab5b7fd82b799658167a41a.png    

    e87d497cf4a5ba2f242661cb51d96202.png

    (2)当向上滑动页面时,背景栏会逐渐显示出来。同时在背景图快要完全移出时,导航栏标题才显示出来。

    46e62a78234983343642bbc1b89bd1ca.png    

    942194e9a79bdfd536c51acbc8869fdb.png    

    11ddc38ebc0f09842331167d4e20701f.png

    2,样例代码import UIKit

    class ViewController: UIViewController {

    let screenWidth = UIScreen.main.bounds.width // 屏幕宽度

    let screenHeight = UIScreen.main.bounds.height // 屏幕高度

    //导航栏背景视图

    var barImageView: UIView?

    var imageView: UIImageView! // 图片视图

    let imageViewHeight: CGFloat = 200 // 图片默认高度

    var tableView: UITableView! //表格视图

    let rowNumber = 50 // 表格数据条目数

    let rowHeight: CGFloat = 40 // 表格行高

    override func viewDidLoad() {

    super.viewDidLoad()

    //获取导航栏背景视图

    self.barImageView = self.navigationController?.navigationBar.subviews.first

    //修改导航栏背景色

    self.navigationController?.navigationBar.barStyle = .black

    self.navigationController?.navigationBar.barTintColor = .orange

    // 首先创建一个滚动视图,图片还是tableView都放在这个滚动视图中

    let scrollView = UIScrollView()

    scrollView.frame = self.view.frame

    scrollView.contentSize = CGSize(width: screenWidth,

    height: CGFloat(rowNumber) * rowHeight + imageViewHeight)

    scrollView.contentInsetAdjustmentBehavior = .never

    scrollView.delegate = self

    self.view.addSubview(scrollView)

    // 初始化图片视图

    self.imageView = UIImageView()

    self.imageView.frame = CGRect(x: 0, y: 0, width: screenWidth,

    height: imageViewHeight)

    self.imageView.image = UIImage(named: "bg.jpeg")

    self.imageView.contentMode = .scaleAspectFill

    scrollView.addSubview(self.imageView)

    //创建表视图

    self.tableView = UITableView(frame: CGRect(x: 0, y: imageViewHeight,

    width: screenWidth, height: CGFloat(rowNumber) * rowHeight), style:.plain)

    self.tableView.delegate = self

    self.tableView.dataSource = self

    self.tableView.rowHeight = CGFloat(rowHeight)

    self.tableView.isScrollEnabled = false

    //创建一个重用的单元格

    self.tableView!.register(UITableViewCell.self,

    forCellReuseIdentifier: "SwiftCell")

    scrollView.addSubview(self.tableView!)

    }

    override func viewDidAppear(_ animated: Bool) {

    // 默认情况下导航栏全透明

    self.barImageView?.alpha = 0

    }

    }

    extension ViewController: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {

    //获取偏移量

    let offset = scrollView.contentOffset.y

    // 改变图片大小

    if offset <= 0 {

    self.imageView.frame = CGRect(x: 0, y: offset, width: screenWidth,

    height: imageViewHeight - offset)

    }

    // 导航栏背景透明度改变

    var delta = offset / (imageViewHeight - 64)

    delta = CGFloat.maximum(delta, 0)

    self.barImageView?.alpha = CGFloat.minimum(delta, 1)

    // 根据偏移量决定是否显示导航栏标题(上方图片快完全移出时才显示)

    self.title = delta > 0.9 ? "hangge.com" : ""

    }

    }

    extension ViewController: UITableViewDelegate, UITableViewDataSource {

    //在本例中,有1个分区

    func numberOfSections(in tableView: UITableView) -> Int {

    return 1

    }

    //返回表格行数(也就是返回控件数)

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)

    -> Int {

    return rowNumber

    }

    //创建各单元显示内容(创建参数indexPath指定的单元)

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)

    -> UITableViewCell {

    //为了提供表格显示性能,已创建完成的单元需重复使用

    let identify:String = "SwiftCell"

    //同一形式的单元格重复使用,在声明时已注册

    let cell = tableView.dequeueReusableCell(

    withIdentifier: identify, for: indexPath)

    cell.textLabel?.text = "数据条目:\(indexPath.row + 1)"

    return cell

    }

    }

    源码下载:

    2ecbd665724e0ddfc29dc3b46a49f466.gifhangge_2272.zip

    展开全文
  • 上拉界面背景图片逐渐消失,下来界面背景图片放大(动态改变UIImageView的高度) 上拉导航条逐渐展示,下拉导航条逐渐隐藏(动态改变导航条的背景图片) 上拉导航条的标题逐渐显现,下拉导航条的标题逐渐隐藏(动态...

    实现的功能

    1. 上拉界面背景图片逐渐消失,下来界面背景图片放大(动态改变UIImageView的高度)
    2. 上拉导航条逐渐展示,下拉导航条逐渐隐藏(动态改变导航条的背景图片)
    3. 上拉导航条的标题逐渐显现,下拉导航条的标题逐渐隐藏(动态改变UILabel的textColor)

    功能实现类似于QQ中的好友动态的顶部效果。


    知识准备

    导航条和导航条的子控件是不能直接通过alpha属性来隐藏的或者来改变透明度的,通常见到的透明有两种情况,一种是颜色,颜色是由RGB和alpha组成,另一种是图片,通过颜色也可以绘制一张图片,因颜色可以透明,所以图片也支持透明,例如png图片

    界面搭建

    使用Storyboard:

    • self.view
      • UITableView(全屏)
      • UIView(容器View,用来作为背景图片、头像等控件的父控件, 高度固定,宽度=屏幕宽度)
        • UIImageView(个人主页背景图片,frame = 容器view.frame)
        • UIImageView(头像,宽度和高度固定)
        • UIView(用于一组按钮的父控件,如相册、说说、个性化、消息等)
          • UIButton(相册)
          • UIButton (说说)
          • UIButton (个性化)
          • UIButton (消息)

    这里写图片描述


    #import "ProfileViewController.h"
    
    #define TopViewHeight 220
    
    @interface ProfileViewController () <UITableViewDelegate,  UITableViewDataSource>
    @property (weak, nonatomic) IBOutlet UITableView *tableView;
    @property (weak, nonatomic) IBOutlet UIView *topView;
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *topViewheightConstraint;
    
    @end
    
    @implementation ProfileViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([self class])];
        self.automaticallyAdjustsScrollViewInsets = NO;
        self.tableView.contentInset = UIEdgeInsetsMake(TopViewHeight, 0, 0, 0);
    
        [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
        [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
    
        UILabel *titleLabel = [[UILabel alloc] init];
        titleLabel.text = @"个人主页";
        titleLabel.textColor = [UIColor colorWithWhite:0 alpha:0];
        [titleLabel sizeToFit];
        self.navigationItem.titleView = titleLabel;
    }
    
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        // 1.动态的改变背景图片的高度(上拉(缩小)和下拉(放大)), 设置背景图片的内容模式为Aspect Fill, 设置父视图自动剪裁边框Clip To Bounds
        CGFloat offsetY = scrollView.contentOffset.y + TopViewHeight;
        CGFloat height = TopViewHeight - offsetY;
        self.topViewheightConstraint.constant = height;
    
        // 2.求透明度,根据透明颜色生成图片,设置导航条的透明背景图片
        // 当前透明度    最大透明度
        // -------- = ----------
        // 当前偏移量    最大偏移量
        CGFloat alpha = offsetY * 1 / (TopViewHeight - 64);
        NSLog(@"%f", alpha);
        UIColor *alphaColor = [UIColor colorWithWhite:1 alpha:alpha];
        UIImage *alphaImage = [self imageWithColor:alphaColor];
        [self.navigationController.navigationBar setBackgroundImage:alphaImage forBarMetrics:UIBarMetricsDefault];
    
    
        // 3. 导航条标题:
        UILabel *titleLabel = (UILabel *)self.navigationItem.titleView;
        titleLabel.textColor = [UIColor colorWithWhite:0 alpha:alpha];
    }
    
    #pragma mark - UITableViewDataSource
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return 40;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([self class]) forIndexPath:indexPath];
        cell.textLabel.text = [NSString stringWithFormat:@"mengday-%ld", indexPath.row];
    
        return cell;
    }
    
    // 最好放到分类中
    - (UIImage *)imageWithColor:(UIColor *)color {
        CGRect rect = CGRectMake(0, 0, 1.0f, 1.0f);
    
        UIGraphicsBeginImageContext(rect.size);
    
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetFillColorWithColor(context, color.CGColor);
        CGContextFillRect(context, rect);
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        return image;
    }
    @end
    

    实现效果如下:
    这里写图片描述


    示例Demo下载链接

    展开全文
  • 1.支持动态合成昵称,头像,背景图等元素生成图片,并可支持显示元素的位置大小间距。 2.使用到强大的bitmap,Canvas,Paint 等绘制图片技术点。 3.参考于抖音的分享界面,支持分享图片,链接。 ###欢迎热心的读者给...
  • APP需要动态从网络下载PNG图片,然后在BottomNavigationView菜单中显示出来 下载PNG图片后,显示发送背景一直是黑色的。。。 使用Glide显示PNG图片也是背景黑色 网上查了好久,没发现解决方法。。。。 实在...
  • 用来做桌面壁纸虽然不可以看见动态效果,但是可以用来做qq空间的背景,全屏而且动态,我也把那个地址贴上来吧。http://img208.poco.cn/mypoco/myphoto/20101028/22/55337871201010282212442755685340620_000.gif
  • 1、QQ,美团,网易云 动态式换肤架构分析 2、手写网易云可动态替换的换肤框架(字体,状态栏换肤,自定义控件,fragment换肤)) 换肤模式: 内置换肤 在Apk包中存在多种资源(图片、颜色值)用于换肤时候切换。 自由度...
  • ASP个性显IP动态QQ签名源码 其中需要用到的其他文件: 同一个目录下必须有纯真IP数据库,文件名为:QQWry.Dat(这个网上很多) 一个背景图片:IpImg.gif IIS+ASP空间:空间支持ASPJPEG组件
  • android 仿QQ好友动态 title滑动渐变

    千次阅读 2015-09-11 14:51:20
    最近QQ更新了qq空间消息列表。天天动听也使用了那效果。...首先贴一下效果图,因为gif动态图片不懂怎么搞。下次一定改进 贴下代码先: 自定义了滑动时背景颜色渐变 package com.seven.fadingdemo; imp
  • Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 ...android 仿QQ动态背景登录效果源码 功能完善的Android 手机本地音乐文件播放器 android模仿触手app主页的效果源码 Android优质博客 Android 9...
  • Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 ... 一款采用MVP的的完整漫画APP源码 ...android 仿QQ动态背景登录效果源码 功能完善的Android 手机本地音乐文件播放器 android模仿触手app主...
  • http://blog.csdn.net/qq_36176250/article/details/77880156将活动背景图片设置透明,然后和动态二维码图片合成一张图片 http://blog.csdn.net/liu85875669/article/details/53995139https://www.zh
  • 加载透明图片

    2015-05-14 10:09:00
    可以被FLASH动态加载的背景透明图片大致就GIF,PNG两种 先说说GIF图片,用普通的加载方法加载GIF图片完后只能看到动态图片的第一帧,由动态图变成静态的了 所幸有达人完美解决了这个问题,并封装好类供我们使用,这...
  • 随着人工智能的不断发展...本文介绍opencv进行静态背景动态目标的识别和跟踪,并且拥有可视化界面,可采用摄像头,读取视频,和单张图片处理。博客链接https://blog.csdn.net/qq_34404407/article/details/108482674
  • C#图片浏览器

    2008-07-21 21:04:58
    一款用C#编的图片浏览器,功能:可以像QQ一样截图,可以抓屏,可以实现动态图片浏览,可以播放背景音乐,可以实现上一张,下一张浏览,还可以有图片的其他滤镜处理。还可以实现删除等
  • 动态更换背景图片,元素用PNG贴图,设置背景透明,以便与窗口背景图片混合,背景图片加上自适应贴图,局部放大,达到QQ的背景换肤效果. 调色思路: 动态更换主题颜色,用主题颜色与每个元素进行颜色混合,达到调色效果. ...
  • android 图片选择器

    2018-01-23 10:10:10
    动态获取系统权限,避免闪退 5.支持相片or视频的单选和多选 6.支持裁剪比例设置,如常用的 1:1、3:4、3:2、16:9 默认为图片大小 7.支持视频预览 8.支持gif图片 9.支持.webp格式图片 10.支持一些常用场景设置...
  • 我们有一个TextView,其里面的内容是可以通过代码动态改变的,我们想用一张图片作为TextView的背景,实现类似于手机QQ对话中的气泡文本效果。 TextView定义如下: android:layout_width=wrap_content...背景图片如下

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 312
精华内容 124
关键字:

qq动态背景图片