方便吗 纯代码写android
2016-07-14 17:44:45 weizhiiceboy3 阅读数 3787

先贴代码:


/**
 * RelativeLayout、LinerLayout以及FrameLayout布局使用对应的params
 * 如:RelativeLayout.LayoutParams LinerLayout.LayoutParams
 * 普通的组件(Button TextView等可以使用ViewGroup.LayoutParams)
 *注:其实有的时候RelativeLayout.LayoutParams LinerLayout.LayoutParams可以混用,但是他们有各自特有的方法特性,如果
 * 需要用到这个特定的方法的时候就不能够混用了。
 * */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        initView();


    }

    private void ConverView(){


        final LinearLayout mask = new LinearLayout(this);
        mask.setOrientation(LinearLayout.VERTICAL);
        LinearLayout.LayoutParams maskParams = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        mask.setBackgroundColor(getResources().getColor(R.color.red));

        Button btn = new Button(this);
        final Button btn2 = new Button(this);
        ViewGroup.LayoutParams btnParams = new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        btn.setText("click");
        btn2.setText("click2");
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //mask.removeView(btn2);
                //mask.removeAllViews();
                //mask.setVisibility(View.GONE);
                //一层一层覆盖View
                ConverView();
            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //一层一层的剥离View
                mask.setVisibility(View.GONE);
            }
        });
        mask.addView(btn,btnParams);


        //addView是在对应的布局上增加View
        mask.addView(btn2,btnParams);


        //是在原有的视图上覆盖一个视图(就是这里的截图2上的)
        addContentView(mask,maskParams);
        //mask.removeView(btn);
    }

    private void initView() {
        // 获取xml的RelativeLayout
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        for (int i = 0; i < 5; i++) {

            //布局是LinerLayout的话这里一般就是使用LinearLayout.LayoutParams什么布局使用什么
            LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);


            // 每行都有一个linearlayout
            LinearLayout lLayout = new LinearLayout(this);
            lLayout.setId(i + 10);
            lLayout.setOrientation(LinearLayout.HORIZONTAL);
            LinearLayout.LayoutParams lLayoutlayoutParams = new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

            lLayout.setLayoutParams(lLayoutlayoutParams);

            TextView tv = new TextView(this);
            tv.setId(i);
            tv.setText("这是第" + i + "个文本框");
            tv.setTextColor(Color.BLUE);

            TextView tv_num = new TextView(this);
            tv_num.setId(i + 20);
            tv_num.setText(i + "台");
            tv_num.setTextColor(Color.RED);

            // 为TextView添加长高设置
            ViewGroup.LayoutParams layoutParams_txt = new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            tv.setLayoutParams(layoutParams_txt);
            tv_num.setLayoutParams(layoutParams_txt);

            // 添加到每行的linearlayout中
            lLayout.addView(tv);
            lLayout.addView(tv_num);

            // 每个linearlayout都在前一个的下面,第一个在顶,不处理
            if (i > 0) {
               // relativeParams.addRule(RelativeLayout.BELOW, i + 10 - 1);
            }

            // 把每个linearlayout加到relativelayout中
            layout.addView(lLayout, llParams);
            //setContentView(layout);
        }


        Button btn = new Button(this);
        ViewGroup.LayoutParams btnParams = new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        btn.setText("覆盖View");
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ConverView();
            }
        });
        layout.addView(btn,btnParams);


        //就是Activity上显示的最底层的View
        setContentView(layout);


    }
}

效果图:
第一步、
这里写图片描述
第二步、
这里写图片描述
第三步、不断点击click,就会不断的覆盖 颜色也会不断的加深,点击click2覆盖的View就会不断的剥离,颜色就会慢慢恢复。
主要是理解:
1、addContentView setcontentView addView
2、RelativeLayout、LinerLayout以及FrameLayout布局使用对应的params怎么选择(见代码的最上面)

注:
1、setcontentView :
使用setContentView可以在Activity中动态切换显示的View,这样,不需要多个Activity就可以显示不同的界面,因此不再需要在Activity间传送数据,变量可以直接引用。但是,在android SDK给我们建的默认的Hello World程序中,调用的是setContentView(int layoutResID)方法,如果使用该方法切换view,在切换后再切换回,无法显示切换前修改后的样子,也就是说,相当于重新显示一个view,并非是把原来的view隐藏后再显示。其实setContentView是个多态方法,我们可以先用LayoutInflater把布局xml文件引入成View对象,再通过setContentView(View view)方法来切换视图。因为所有对View的修改都保存在View对象里,所以,当切换回原来的view时,就可以直接显示原来修改后的样子。
2、addContentView setcontentView 的区别
两者的区别主要包括两点:
1). 以添加UI组件是否被移除
setContentView() 会导致先前添加的被移除, 即替换性的;
而 addContentView() 不会移除先前添加的UI组件,即是累积性的

2). 是否控制布局参数
addContentView() 有两个参数, 可以控制布局参数; 你指出的这个setContentView 没有接受布局参数,
默认使用MATCH_PARENT; 不过setContentView()也有带两个参数的版本, 可以控制布局参数。

3、addview
在原有的view上增加组件

//后期会更新从源码角度的分析

2015-09-19 16:24:48 ytmfdw 阅读数 981

看到支付宝启动界面,很清新,比较绚,于是做了个简单界面,只是完成了动画效果,并集成到一个控件上去,使用起来非常方便,本人较懒,完成这些效果后,就没再走下去了

不多说,上代码

package com.example.test;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.animation.LinearInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

public class CircleAnim extends FrameLayout {

	ImageView iv_anim;
	ImageView iv_anim2;
	int width;
	ObjectAnimator anim;
	ObjectAnimator anim2;
	LayoutParams params;
	LayoutParams params2;

	AnimatorSet animSet;

	public CircleAnim(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		init();
	}

	public CircleAnim(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		init();
	}

	public CircleAnim(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
		init();
	}

	@Override
	protected void onAttachedToWindow() {
		// TODO Auto-generated method stub
		super.onAttachedToWindow();
		animSet.start();
	}

	@Override
	protected void onDetachedFromWindow() {
		// TODO Auto-generated method stub
		super.onDetachedFromWindow();
		animSet.cancel();
	}

	private void init() {
		this.setBackgroundColor(0xFF00285c);
		DisplayMetrics mDisplayMetrics = new DisplayMetrics();// 屏幕分辨率容器
		if (!(getContext() instanceof Activity)) {
			return;
		}

		((Activity) getContext()).getWindowManager().getDefaultDisplay()
				.getMetrics(mDisplayMetrics);
		int w = mDisplayMetrics.widthPixels;
		int h = mDisplayMetrics.heightPixels;
		width = w > h ? h : w;
		iv_anim = new ImageView(getContext());
		iv_anim.setScaleType(ScaleType.FIT_CENTER);
		iv_anim.setImageResource(R.drawable.crile);
		params = new LayoutParams(width, width);
		params.gravity = Gravity.CENTER;
		this.addView(iv_anim, params);

		iv_anim2 = new ImageView(getContext());
		iv_anim2.setScaleType(ScaleType.FIT_CENTER);
		iv_anim2.setImageResource(R.drawable.crile);
		params2 = new LayoutParams((int) (width * 2 / 3), (int) (width * 2 / 3));
		params2.gravity = Gravity.CENTER;
		this.addView(iv_anim2, params2);

		LinearInterpolator polator = new LinearInterpolator();
		anim = ObjectAnimator.ofFloat(iv_anim, "rotation", 0f, 360f);
		anim.setInterpolator(polator);
		anim.setDuration(5000);
		anim.setRepeatCount(-1);

		LinearInterpolator polator2 = new LinearInterpolator();
		anim2 = ObjectAnimator.ofFloat(iv_anim2, "rotation", 360f, 0f);
		anim2.setInterpolator(polator2);
		anim2.setDuration(5000);
		anim2.setRepeatCount(-1);

		animSet = new AnimatorSet();
		animSet.play(anim).with(anim2);
	}

}
以上代码是一个简单的View,继承FrameLayout,然后在里面加了两个ImageView,每个ImageView添加了一个动画,动画就是一个简单的圆周动画,并让他匀速转动,无限转下去,需要注意的是,如果不加LinearInterpolator 的放,默认动画效果会是先慢再快再慢的,整个代码非常简单,使用起来更简单:

package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		super.onCreate(savedInstanceState);
		setContentView(new CircleAnim(this));
		// setContentView(R.layout.main);
	}

}
里面有张动画图片没有,可以到项目下载地址去下载:点击下载源码



2014-06-26 14:21:07 landehuxi 阅读数 1224

项目中很多的Button, 同时配置很多按钮切图,Selector是不是很烦, 使用下面这个类,就可以直接为Button增加点击效果. 不用多个图片,不用Selector.

用法:Button.setOnTouchListener(Effect_Click.getInstance());

效果图:   

源码:

class Effect_Click implements OnTouchListener {
	private static Effect_Click Effect_Click;
	public static Effect_Click getInstance() {
		if (Effect_Click == null) {
			Effect_Click = new Effect_Click();
		}
		return Effect_Click;
	}

	private Effect_Click() {

	}

	@Override
	public boolean onTouch(View arg0, MotionEvent arg1) {
		if (arg1.getAction() == MotionEvent.ACTION_DOWN) {
			arg0.getBackground().setAlpha(450);
		} else if (arg1.getAction() == MotionEvent.ACTION_UP) {
			arg0.getBackground().setAlpha(999);
		}
		arg0.invalidate();
		return false;
	}
}

用法1: Button.setOnTouchListener(Effect_Click.getInstance());

用法2: 自己可以进行二次封装, 比如实现自己的MyButton,直接在XML中引用. 这样项目中所有的按钮只要设置好背景图,就会天然带着点击效果,再也不用切图了.

用法3: 抛砖引玉,出了透明度处理,还可以对Drawable增加其他特效,如增加边框,增加震动动画等, 用纯代码批量而简洁的给按钮增加丰富特效.



2010-01-27 18:12:00 dingran999999999 阅读数 1070

public class main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);
       
        TextView v=new TextView(this);
        v.setFocusable(true);
        v.setText("哇哈哈哇哈哈哇哈哈哇哈哈哇哈哈wahahawahhahwahhahahwahahhahahawhahhaha......");
        v.setTransformationMethod(SingleLineTransformationMethod.getInstance());
        v.setSingleLine(true);
        v.setEllipsize(TextUtils.TruncateAt.MARQUEE);
        v.setMarqueeRepeatLimit(3);

        v.requestFocus();

        this.setContentView(v);
       
       
       
    }
}

2015-02-10 15:20:00 weixin_34275734 阅读数 8

项目中非常多的Button, 同一时候配置非常多button切图,Selector是不是非常烦, 使用以下这个类,就能够直接为Button添加点击效果. 不用多个图片,不用Selector.

使用方法:Button.setOnTouchListener(Effect_Click.getInstance());

效果图:   

源代码:

class Effect_Click implements OnTouchListener {
	private static Effect_Click Effect_Click;
	public static Effect_Click getInstance() {
		if (Effect_Click == null) {
			Effect_Click = new Effect_Click();
		}
		return Effect_Click;
	}

	private Effect_Click() {

	}

	@Override
	public boolean onTouch(View arg0, MotionEvent arg1) {
		if (arg1.getAction() == MotionEvent.ACTION_DOWN) {
			arg0.getBackground().setAlpha(450);
		} else if (arg1.getAction() == MotionEvent.ACTION_UP) {
			arg0.getBackground().setAlpha(999);
		}
		arg0.invalidate();
		return false;
	}
}

使用方法1: Button.setOnTouchListener(Effect_Click.getInstance());

使用方法2: 自己能够进行二次封装, 比方实现自己的MyButton,直接在XML中引用. 这样项目中全部的button仅仅要设置好背景图,就会天然带着点击效果,再也不用切图了.

使用方法3: 抛砖引玉,出了透明度处理,还能够对Drawable添加其它特效,如添加边框,添加震动动画等, 用纯代码批量而简洁的给button添加丰富特效.



没有更多推荐了,返回首页