安卓——关于一些ui界面设置(直续更新ing)
发布日期:2021-06-29 11:11:52 浏览次数:3 分类:技术文章

本文共 21918 字,大约阅读时间需要 73 分钟。

1;关于Listview中的Item设置成某个图片样子。

效果图
这里写图片描述
图文件;
这里写图片描述
代码;在适配器中的getView操作
这里写图片描述

2;界面设置背景

这里写图片描述

3;设置这种按钮

这里写图片描述
//在layout文件中的Botton设置
android:background=”@drawable/bg_alibuybutton”
建立四个xml文件
这里写图片描述

4;ToggleButton按钮设置

效果图
这里写图片描述
layout文件中button设置
android:background=”@drawable/bg_button”
三个xml文件;
这里写图片描述

5;显示popupWindow悬浮框

点击参数设置,弹出悬浮框
这里写图片描述
在点击事件中调用showSettingPopwindow这个方法;

/**     * 显示popupWindow悬浮框     */    private void showSettingPopwindow() {        // 利用layoutInflater获得View        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);        View view = inflater.inflate(R.layout.popwindow_setting, null);        // 下面是两种方法得到宽度和高度 getWindow().getDecorView().getWidth()        final PopupWindow window = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT, 1500);        // 设置popWindow弹出窗体可点击,这句话必须添加,并且是true        window.setFocusable(true);        // 实例化一个ColorDrawable颜色为半透明0xb00000        ColorDrawable dw = new ColorDrawable(0xb00000);        window.setBackgroundDrawable(dw);        // 设置popWindow的显示和消失动画        window.setAnimationStyle(R.style.mypopwindow_anim_style);        // 在底部显示,第一个参数是parent,不是在其中显示,而是通过子控件找到主窗体,随便一个子控件都行        window.showAtLocation(Connect_sthsaActivity.this.findViewById(R.id.connect_tb), Gravity.BOTTOM, 0, 0);        // 获取控件        time_et = (EditText) view.findViewById(R.id.time_et);        temHumIp_et = (EditText) view.findViewById(R.id.temHumIp_et);        temHumPort_et = (EditText) view.findViewById(R.id.temHumPort_et);        smokeIp_et = (EditText) view.findViewById(R.id.smokeIp_et);        smokePort_et = (EditText) view.findViewById(R.id.smokePort_et);        fanIp_et = (EditText) view.findViewById(R.id.fanIp_et);        fanPort_et = (EditText) view.findViewById(R.id.fanPort_et);        tubeIp_et = (EditText) view.findViewById(R.id.tubeIp_et);        tubePort_et = (EditText) view.findViewById(R.id.tubePort_et);        buzzerIp_et = (EditText) view.findViewById(R.id.buzzerIp_et);        buzzerPort_et = (EditText) view.findViewById(R.id.buzzerPort_et);        cancel = (Button) view.findViewById(R.id.cancelBtn);        confirm = (Button) view.findViewById(R.id.confirmBtn);        // 初始化界面        smokeIp_et.setText(Const.SMOKE_IP);        smokePort_et.setText(String.valueOf(Const.SMOKE_PORT));        temHumIp_et.setText(Const.TEMHUM_IP);        temHumPort_et.setText(String.valueOf(Const.TEMHUM_PORT));        fanIp_et.setText(Const.FAN_IP);        fanPort_et.setText(String.valueOf(Const.FAN_PORT));        tubeIp_et.setText(Const.TUBE_IP);        tubePort_et.setText(String.valueOf(Const.TUBE_PORT));        buzzerIp_et.setText(Const.BUZZER_IP);        buzzerPort_et.setText(String.valueOf(Const.BUZZER_PORT));        time_et.setText(String.valueOf(Const.time));        // 点击事件        // 取消        cancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                window.dismiss();            }        });        // 确定        confirm.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 获取采集周期、IP、端口、上下限                String SMOKE_IP = smokeIp_et.getText().toString().trim();                String SMOKE_PORT = smokePort_et.getText().toString().trim();                String TEMHUM_IP = temHumIp_et.getText().toString().trim();                String TEMHUM_PORT = temHumPort_et.getText().toString().trim();                String FAN_IP = fanIp_et.getText().toString().trim();                String FAN_PORT = fanPort_et.getText().toString().trim();                String TUBE_IP = tubeIp_et.getText().toString().trim();                String TUBE_PORT = tubePort_et.getText().toString().trim();                String BUZZER_IP = buzzerIp_et.getText().toString().trim();                String BUZZER_PORT = buzzerPort_et.getText().toString().trim();                String time = time_et.getText().toString().trim();                if (checkIpPort(SMOKE_IP, SMOKE_PORT) && checkIpPort(TEMHUM_IP, TEMHUM_PORT)                        && checkIpPort(FAN_IP, FAN_PORT) && time != null && time != "") {                    Const.SMOKE_IP = SMOKE_IP;                    Const.SMOKE_PORT = Integer.parseInt(SMOKE_PORT);                    Const.TEMHUM_IP = TEMHUM_IP;                    Const.TEMHUM_PORT = Integer.parseInt(TEMHUM_PORT);                    Const.FAN_IP = FAN_IP;                    Const.FAN_PORT = Integer.parseInt(FAN_PORT);                    Const.TUBE_IP = TUBE_IP;                    Const.TUBE_PORT = Integer.parseInt(TUBE_PORT);                    Const.BUZZER_IP = BUZZER_IP;                    Const.BUZZER_PORT = Integer.parseInt(BUZZER_PORT);                    Const.time = Integer.parseInt(time);                } else {                    Toast.makeText(context, "配置信息不正确,请重输!", Toast.LENGTH_SHORT).show();                    return;                }                window.dismiss();            }        });    }
//放入style中的。

然后就是两个xml文件;popshow_anim和pophidden_anim

这里写图片描述

6;红点点,其实就是一个textView但是看效果图,但是用法就当时textView,通过id来使用;

这里写图片描述
来显示数字;
看代码布局;
这里写图片描述
代码;

//layout文件中。
//clean_anim文件;
//com.xinlan.dragindicator包中的是三个类
package com.xinlan.dragindicator;import com.fro.market_peoplecalculatecase.R;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.ValueAnimator;import android.annotation.TargetApi;import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.drawable.AnimationDrawable;import android.graphics.drawable.Drawable;import android.os.Build;import android.util.AttributeSet;import android.util.Log;import android.util.TypedValue;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.ViewParent;import android.view.animation.OvershootInterpolator;import android.widget.ImageView;import android.widget.TextView;/** * 可拖拽的红点提示 * 

* Created by panyi on 2016/3/31. */public class DragIndicatorView extends TextView {
private static int DRAW_COLOR = Color.RED; //private static int DEFAULT_DISTANCE = 200; private static float DEFAULT_VISCOUS_VALUE = 0.15f;//粘滞系数 private Paint mPaint; private int mRadius = 0; private float mViscous = DEFAULT_VISCOUS_VALUE; private float mOriginX = 0; private float mOriginY = 0; private int mCenterX = 0; private int mCenterY = 0; private float mDx = 0; private float mDy = 0; //private int mDismissDetectDistance = DEFAULT_DISTANCE;//超过此距离 判定为让提示View消失 private ViewGroup mRootView;//根布局视图 作为画板使用 private DragIndicatorView mCloneView; private ViewParent mParentView; private SpringView mSpringView; private OnIndicatorDismiss mOnDismissAction; public DragIndicatorView(Context context) { super(context); initView(context); } public DragIndicatorView(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public DragIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); } public DragIndicatorView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr); initView(context); } private void initView(Context context) { setGravity(Gravity.CENTER);//内容居中 mPaint = new Paint(); mPaint.setColor(DRAW_COLOR); mPaint.setAntiAlias(true); if (context instanceof Activity) { mRootView = (ViewGroup) ((Activity) context).getWindow().getDecorView(); } //System.out.println("init View"); } @Override public void setBackgroundResource(int resid) { showCannotSetBgErrorLog(); } @Override public void setBackground(Drawable background) { showCannotSetBgErrorLog(); } @Override public void setBackgroundColor(int color) { showCannotSetBgErrorLog(); } private void showCannotSetBgErrorLog() { Log.e("error", "This drag indicator view can not set custom background"); } @Override protected void onDraw(Canvas canvas) { drawBackground(canvas); super.onDraw(canvas); } /** * draw circle background * * @param canvas */ private void drawBackground(Canvas canvas) { mRadius = Math.min(getMeasuredWidth(), getMeasuredHeight()) >> 1; canvas.drawCircle(getWidth() >> 1, getHeight() >> 1, mRadius, mPaint); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //System.out.println("down"); if (mParentView == null) { mParentView = getScrollableParent(); } if (mParentView != null) {
//屏蔽父控件的事件响应 mParentView.requestDisallowInterceptTouchEvent(true); } mDx = event.getX(); mDy = event.getY(); mOriginX = event.getRawX() - mDx + (getWidth() >> 1); mOriginY = event.getRawY() - mDy + (getHeight() >> 1); break; case MotionEvent.ACTION_MOVE: //System.out.println("move"); if (getVisibility() == View.VISIBLE) { setVisibility(View.INVISIBLE); mSpringView = new SpringView(this.getContext()); mSpringView.initSpring(mOriginX, mOriginY, mRadius, getWidth(), getHeight()); mRootView.addView(mSpringView); mCloneView = cloneSelfView(); mRootView.addView(mCloneView, getLayoutParams()); }//end if if (mCloneView != null) { mCloneView.setX(event.getRawX() - mDx); mCloneView.setY(event.getRawY() - mDy); mCloneView.invalidate(); } //拉伸水滴效果 if (mSpringView != null) { //更新弹性控件 mSpringView.update(event.getRawX() - mDx, event.getRawY() - mDy); } break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: //System.out.println("up"); //判断是否dismiss View// if (mSpringView != null && mSpringView.radius <= 0) { //如果拖动超过会消失 if (false) { killView(event.getRawX(), event.getRawY()); mRootView.removeView(mSpringView); mSpringView = null; if (mCloneView != null) { mRootView.removeView(mCloneView); mCloneView = null; } } else {
//不取消 // TODO: 2016/3/31 显示回弹效果动画 恢复View可见 //setVisibility(View.VISIBLE); if (mSpringView != null && mSpringView.spring_len > 1f) {
//存在弹性势能 显示弹性动画效果 mSpringView.startSpringAction(); } else { resetView(); } } if (mParentView != null) {
//恢复父控件对事件的处理 mParentView.requestDisallowInterceptTouchEvent(false); } break; }//end switch return true; } private void resetView() { if (mCloneView != null) { mRootView.removeView(mCloneView); } if (mSpringView != null) { mRootView.removeView(mSpringView); } setVisibility(View.VISIBLE); } /** * 获得父控件 * * @return */ private ViewGroup getScrollableParent() { View target = this; while (true) { View parent; try { parent = (View) target.getParent(); } catch (Exception e) { return null; } if (parent == null) return null; if (parent instanceof ViewGroup) { return (ViewGroup) parent; } target = parent; }//end while } /** * 手动控制 提示按钮按钮不可见 */ public void dismissView() { if (getVisibility() == View.VISIBLE) { int[] screens = new int[2]; getLocationOnScreen(screens); killView(screens[0] + (getWidth() >> 1), screens[1] + (getHeight() >> 1)); }//end if } protected void killView(final float x, final float y) { final ImageView imageView = new ImageView(getContext()); imageView.setImageResource(R.drawable.clean_anim); mRootView.addView(imageView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); imageView.post(new Runnable() { @Override public void run() { imageView.setX(x - (imageView.getMeasuredWidth() >> 1)); imageView.setY(y - (imageView.getMeasuredHeight() >> 1)); } }); AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable(); int totalDuring = 0; for (int i = 0, len = animationDrawable.getNumberOfFrames(); i < len; i++) { totalDuring += animationDrawable.getDuration(i); } animationDrawable.start(); //动画播放结束后 移除ImageView postDelayed(new Runnable() { @Override public void run() { mRootView.removeView(imageView); } }, totalDuring + 20); if (mOnDismissAction != null) { mOnDismissAction.OnDismiss(this); } setVisibility(View.GONE); } /** * 产生一个自己的备份 * * @return */ protected DragIndicatorView cloneSelfView() { DragIndicatorView textView = new DragIndicatorView(getContext()); textView.setText(getText()); textView.setTextColor(getTextColors()); textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getTextSize()); textView.setGravity(getGravity()); textView.setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), getPaddingBottom()); textView.setEnabled(false); return textView; } /** * 获取粘滞系数 * * @return */ public float getViscous() { return mViscous; } /** * 设置粘滞系数 * * @param mViscous */ public void setViscous(float mViscous) { this.mViscous = mViscous; } public interface OnIndicatorDismiss {
void OnDismiss(DragIndicatorView view); } public void setOnDismissAction(OnIndicatorDismiss mOnDismissAction) { this.mOnDismissAction = mOnDismissAction; } /** * */ private final class SpringView extends View {
public float from_x; public float from_y; public float radius; public float to_x; public float to_y; public float toWidth; public float toHeight; private Path mPath = new Path(); boolean isSpringAction = false; float cur_x; float cur_y; float spring_len = 0; float origin_len = 0; ValueAnimator mSpringAnimation; public SpringView(Context context) { super(context); isSpringAction = false; } public void initSpring(float init_x, float init_y, float r, float w, float h) { this.from_x = init_x; this.from_y = init_y; this.to_x = init_x; this.to_y = init_y; this.radius = r; this.toWidth = w; this.toHeight = h; } @Override protected void onDraw(Canvas canvas) { if (radius > 0) { canvas.drawPath(mPath, mPaint);//draw path canvas.drawCircle(from_x, from_y, radius, mPaint); }//end if } public void update(float x, float y) { this.to_x = x; this.to_y = y; //目的圆 球心坐标 float dest_x = to_x + toWidth / 2; float dest_y = to_y + toHeight / 2; updatePosition(dest_x, dest_y); } private void updatePosition(final float dest_x, final float dest_y) { this.cur_x = dest_x; this.cur_y = dest_y; float deltaX = 0; float deltaY = 0; if (dest_y >= from_y) { deltaX = dest_x - from_x; deltaY = dest_y - from_y; } else { deltaX = from_x - dest_x; deltaY = from_y - dest_y; }//end if float distance = (float) Math.sqrt(deltaX * deltaX + deltaY * deltaY); //radius = (float)mRadius/(distance + 1); // r = R - R * (1 -1/d)); radius = mRadius - mViscous * distance; if (radius < 0.2f * mRadius) { radius = 0; } if (radius > 0) { // (1 , 0) (x,y) double cos_delta = deltaX / distance; double angle = Math.acos(cos_delta); double circle_from_thela1 = angle + Math.PI / 2; double circle_from_thela2 = circle_from_thela1 + Math.PI; float circle_from_circle_x1 = (float) (from_x + radius * Math.cos(circle_from_thela1)); float circle_from_circle_y1 = (float) (from_y + radius * Math.sin(circle_from_thela1)); float circle_from_circle_x2 = (float) (from_x + radius * Math.cos(circle_from_thela2)); float circle_from_circle_y2 = (float) (from_y + radius * Math.sin(circle_from_thela2)); float circle_to_circle_x1 = (float) (dest_x + mRadius * Math.cos(circle_from_thela1)); float circle_to_circle_y1 = (float) (dest_y + mRadius * Math.sin(circle_from_thela1)); float circle_to_circle_x2 = (float) (dest_x + mRadius * Math.cos(circle_from_thela2)); float circle_to_circle_y2 = (float) (dest_y + mRadius * Math.sin(circle_from_thela2)); mPath.reset(); mPath.moveTo(circle_from_circle_x1, circle_from_circle_y1); mPath.lineTo(circle_from_circle_x2, circle_from_circle_y2); mPath.quadTo((from_x + dest_x) / 2, (from_y + dest_y) / 2, circle_to_circle_x2, circle_to_circle_y2); //mPath.lineTo(dest_x,dest_y); //mPath.lineTo(circle_to_circle_x2, circle_to_circle_y2); mPath.lineTo(circle_to_circle_x1, circle_to_circle_y1); mPath.quadTo((from_x + dest_x) / 2, (from_y + dest_y) / 2, circle_from_circle_x1, circle_from_circle_y1); mPath.close(); if (mCloneView != null) { mCloneView.setX(cur_x - toWidth / 2); mCloneView.setY(cur_y - toHeight / 2); } spring_len = distance; } else { spring_len = 0; } invalidate(); } /** * 做回弹操作 */ public void startSpringAction() { isSpringAction = true; origin_len = spring_len; if (mSpringAnimation != null) { mSpringAnimation.cancel(); } mSpringAnimation = ValueAnimator.ofObject(new PointEvaluator(), new Point(cur_x, cur_y), new Point(from_x, from_y)); mSpringAnimation.setDuration(120); mSpringAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { Point p = (Point) animation.getAnimatedValue(); updatePosition(p.getX(), p.getY()); //invalidate(); } }); mSpringAnimation.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { resetView(); } }); mSpringAnimation.setInterpolator(new OvershootInterpolator(5)); mSpringAnimation.start(); postInvalidate(); } }//end inner class}//end class
package com.xinlan.dragindicator;/** * Created by panyi on 16/4/5. */public class Point {
private float x; private float y; public Point(float x, float y) { this.x = x; this.y = y; } public float getX() { return x; } public float getY() { return y; }}//end class
package com.xinlan.dragindicator;import android.animation.TypeEvaluator;/** * Created by panyi on 16/4/5. * */public class PointEvaluator implements TypeEvaluator
{
@Override public Point evaluate(float fraction, Point startValue, Point endValue) { float x = startValue.getX() + fraction * (endValue.getX() - startValue.getX()); float y = startValue.getY() + fraction * (endValue.getY() - startValue.getY()); Point point = new Point(x, y); return point; }}//end class

转载地址:https://blog.csdn.net/zw1996/article/details/75174249 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:刷门禁——判断卡号是否一样(String==String)出现False
下一篇:安卓——WIFI连接

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月04日 19时44分04秒