安卓自定义View中AttributeSet问题

我在github上看到一个比较炫酷的仪表盘型进度条,然后就下下来玩,可是我遇到一个问题,
看如下代码:

 public class DashedCircularProgress extends RelativeLayout {

    private ExternalCirclePainter externalCirclePainter;//外部圆
    private InternalCirclePainter internalCirclePainter;//内部圆
    private ProgressPainter progressPainter;
    private IconPainter iconPainter;//圆圈上面有图片
    private Bitmap image;
    // Interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),
    // decelerated(减速),repeated(重复),bounced(弹跳)等。
    private Interpolator interpolator = new AccelerateDecelerateInterpolator();
    private int externalColor = Color.WHITE;
    private int internalBaseColor = Color.YELLOW;
    private int progressColor = Color.WHITE;
    private float min = 0;
    private float last = min;
    private float max = 100;
    private ValueAnimator valueAnimator;
    private OnValueChangeListener valueChangeListener;
    private float value ;
    private int duration = 1000;
    private int padingTop = 22;
    private int heightNormalittation = 10;
    private int progressStrokeWidth = 48;

    public DashedCircularProgress(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public DashedCircularProgress(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }
        /**中间还有些代码,就省略没有贴上来*/
            public void setValue(float value) {
        this.value = value;
        if (value <= max || value >= min) {
            animateValue();
        }
    }
}

我现在想在我的活动中调用这个类中的setValue()方法,可是这个构造方法里面有个
AttributeSet attrs,于是我就不懂这个到底该怎么传入这个参数,这个参数应该设置一些
什么东西,各位前辈指点一下吧,感谢!!!

1个回答

一般控件是在xml中使用的!而在xml中使用这个控件它调用的是
public DashedCircularProgress(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
这个只有两个参数的构造函数。AttributeSet是这个控件的一些属性设置的值(一般用于自定义控件属性所用)。
所以你只要在xml中使用这个控件就好了。无需担心它传递的是什么,如果你想了解,可以找找自定义view的相关blog。
而你说的要调用setValue()方法,则只要在activity中获取这个DashedCircularProgress,通过他调用setValue()即可!

u012846783
勤奋的懒惰 回复时代逆子: 首先setValue()方法是DashedCircularProgress类里面的一个方法,所以你只要通过一个DashedCircularProgress的实例就可以调用它,简单来说就跟你使用TextView一样,textView.settext("这个是一个TextView")。他是通过代码设置textView的值,同样你也可以在xml中设置:android:text="这是一个TextView"达到同样的效果。一个是通过xml设置,一个是直接设置!如果通过xml设置的话那么需要一个对象来转换你在xml中设置的那么属性值,那么AttributeSet就是转换用的!如果还是不懂,可以百度搜自定义view,很多人讲这个自定义view入门很好的,比如:张宏祥老师。。。。
接近 4 年之前 回复
lch1251680944
时代逆子 获取DashedCircularProgress的方式是不是这样的呢,DashedCircularProgress progress;progress =(DashedCircularProgress)findViewById(自定义的view的id);progress.setValue();这样呢,我发现这样是可以的,只是不懂它的道理是什么。
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android自定义view失败

安卓编程时想在xml布局中自定义一个view,但当把自定义的view写在xml里面时,就会报错说The following classes could not be instantiated:- com.example.wifidetection.MyPaint.MyView 。 其中MyView就是我自定义的view,前面是它的路径,里面wifideection是包名,MyPaint是MyView所在的类,代码如下: <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:custom="http://schemas.android.com/apk/res/com.example.wifidetection" android:id="@+id/mScrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" > <LinearLayout android:orientation = "vertical" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/start" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="开始绘图" /> <com.example.wifidetection.MyPaint.MyView android:layout_width="200dp" android:layout_height="100dp" /> </LinearLayout> </ScrollView> ``` ``` MyPaint中是这样的 public class MyPaint extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ····· setContentView(R.layout.paint_layout);//显示MyView布局 } class MyView extends View { public MyView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyView(Context context){ super(context); ``` ``` 一直搞不懂,网上也没找到什么好的解释,求论坛里大神解答

Android自定义view贝塞尔曲线重绘问题

Android自定义view,怎么不会销毁之前的然后重绘啊?下面贴上代码,请大神帮忙看下 ![图片说明](https://img-ask.csdn.net/upload/201707/24/1500888556_916529.gif) 源码如下: ``` import android.annotation.TargetApi; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.os.Build; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class BezierView extends View { private Path mPath; private Point startPoint; private Point endPoint; // 辅助点 private Point assistPoint; private Paint mPaint; public BezierView(Context context) { super(context); init(context); } public BezierView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context); } public BezierView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public BezierView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context); } /** * 初始化画笔 路径 */ private void init(Context context){ mPaint=new Paint(); mPaint.setColor(Color.BLACK); //抗锯齿 mPaint.setAntiAlias(true); //防抖动 mPaint.setDither(true); //描边 mPaint.setStyle(Paint.Style.STROKE); //笔宽 mPaint.setStrokeWidth(5); mPath=new Path(); startPoint=new Point(200,200); endPoint=new Point(400,200); assistPoint=new Point(600,900); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //重置路径 // mPaint.reset(); //起点 mPath.moveTo(startPoint.x,startPoint.y); // mPath.quadTo(assistPoint.x,assistPoint.y,endPoint.x,endPoint.y); //画路径 canvas.drawPath(mPath,mPaint); //画辅助点 canvas.drawPoint(assistPoint.x,assistPoint.y,mPaint); } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); switch (event.getAction()){ case MotionEvent.ACTION_MOVE : assistPoint.x= (int) event.getX(); assistPoint.y= (int) event.getY(); break; } invalidate(); return true; } } ```

android自定义view插入xml

自定义View代码如下。我希望把这个view插入到一个layout的xml的文件中。一直出错,错误类型是error inflating class。应该是这个View出的问题 package com.example.browserstation; import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; public class touchmove extends View{ private int start_x; private final int width = MainActivity.screenWidth; private int height ; private int backwidth; private int ori_x = 0; //点击屏幕原始坐标,当前坐标和位移数据 private int ori_y = 0; private int cur_x = 0; private int cur_y = 0; private int del_x = 0; private int del_y = 0; private Bitmap bmp_back; private Bitmap bmp_bg1; private Bitmap bmp_draw0; private Bitmap bmp_draw1; private Boolean flag_move = false; private Boolean flag_temp = false; private int index = 0; private Context c; private TimerTask ttsk = new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub if(flag_move)h.sendEmptyMessage(0x888); } }; final Handler h = new Handler(){ //处理信息,背景移动 public void handleMessage(Message msg){ if(msg.what == 0x888){ if(start_x < (backwidth - width-2)){ flag_temp = false; start_x += 3; }else if(start_x < backwidth - 3){ start_x += 3; flag_temp = true; }else{ if(index>0){ backwidth = bmp_back.getWidth(); index = 0; }else { backwidth = bmp_bg1.getWidth(); index += 1; } start_x = 0; flag_temp = false; flag_move = false; } } invalidate(); } }; private Timer timer; public touchmove(Context context) { super(context); c = context; bmp_back = BitmapFactory.decodeResource(getResources(), R.drawable.mainback); bmp_back = new zoompicture(bmp_back,bmp_back.getWidth(),MainActivity.screenHeight).getOutbtm(); bmp_bg1 = BitmapFactory.decodeResource(getResources(), R.drawable.bg1); bmp_bg1 = new zoompicture(bmp_bg1,bmp_bg1.getWidth(),MainActivity.screenHeight).getOutbtm(); start_x = 0; backwidth = bmp_back.getWidth(); height = MainActivity.screenHeight; bmp_draw0 = bmp_back; bmp_draw1 = bmp_back; timer = new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub if(flag_move){ h.sendEmptyMessage(0x888); } } }, 0, 100); } public touchmove(Context context, AttributeSet attrs) { super(context,attrs); // TODO Auto-generated constructor stub c = context; bmp_back = BitmapFactory.decodeResource(getResources(), R.drawable.mainback); bmp_back = new zoompicture(bmp_back,bmp_back.getWidth(),MainActivity.screenHeight).getOutbtm(); bmp_bg1 = BitmapFactory.decodeResource(getResources(), R.drawable.bg1); bmp_bg1 = new zoompicture(bmp_bg1,bmp_bg1.getWidth(),MainActivity.screenHeight).getOutbtm(); start_x = 0; backwidth = bmp_back.getWidth(); height = MainActivity.screenHeight; bmp_draw0 = bmp_back; bmp_draw1 = bmp_back; timer.schedule(new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub if(flag_move){ h.sendEmptyMessage(0x888); } } }, 0, 100); } public touchmove(Context context, AttributeSet attrs, int delStyle) { super(context,attrs,delStyle); // TODO Auto-generated constructor stub c = context; bmp_back = BitmapFactory.decodeResource(getResources(), R.drawable.mainback); bmp_back = new zoompicture(bmp_back,bmp_back.getWidth(),MainActivity.screenHeight).getOutbtm(); bmp_bg1 = BitmapFactory.decodeResource(getResources(), R.drawable.bg1); bmp_bg1 = new zoompicture(bmp_bg1,bmp_bg1.getWidth(),MainActivity.screenHeight).getOutbtm(); start_x = 0; backwidth = bmp_back.getWidth(); height = MainActivity.screenHeight; bmp_draw0 = bmp_back; bmp_draw1 = bmp_back; timer.schedule(new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub if(flag_move){ h.sendEmptyMessage(0x888); } } }, 0, 100); } /* (non-Javadoc) * @see android.view.View#onTouchEvent(android.view.MotionEvent) */ @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); switch(action){ case MotionEvent.ACTION_DOWN:ori_x = (int)event.getX();ori_y = (int)event.getY(); Log.v("ori_x :",""+ori_x); return true; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP:cur_x = (int)event.getX();cur_y = (int)event.getY(); del_x = cur_x - ori_x;del_y = cur_y - ori_y; if(del_x < -50){ flag_move = true; };Log.v("delx: ",""+del_x); break; } // TODO Auto-generated method stub return super.onTouchEvent(event); } /* (non-Javadoc) * @see android.view.View#onDraw(android.graphics.Canvas) */ @Override protected void onDraw(Canvas canvas) { if(!flag_temp){ switch(index){ case 0:bmp_draw0 = Bitmap.createBitmap(bmp_back,start_x,0,width,height); bmp_draw1 = bmp_draw0; canvas.drawBitmap(bmp_draw0,0,0,new Paint()); break; case 1:bmp_draw0 = Bitmap.createBitmap(bmp_bg1,start_x,0,width,height); bmp_draw1 = bmp_draw0; canvas.drawBitmap(bmp_draw0,0,0,new Paint()); break; } }else{ switch(index){ case 0:bmp_draw0 = Bitmap.createBitmap(bmp_back,start_x,0,bmp_back.getWidth()-start_x,height); bmp_draw1 = Bitmap.createBitmap(bmp_bg1,0,0,start_x+width-backwidth,height); canvas.drawBitmap(bmp_draw0,0,0,new Paint()); canvas.drawBitmap(bmp_draw1, width-bmp_draw1.getWidth(),0, new Paint()); break; case 1:bmp_draw0 = Bitmap.createBitmap(bmp_bg1,start_x,0,bmp_bg1.getWidth()-start_x,height); bmp_draw1 = Bitmap.createBitmap(bmp_back,0,0,start_x+width-backwidth,height); canvas.drawBitmap(bmp_draw0,0,0,new Paint()); canvas.drawBitmap(bmp_draw1, width-bmp_draw1.getWidth(),0, new Paint()); break; } } Log.v("v","draw1:"+bmp_draw0.getWidth()+"draw2:"+bmp_draw1.getWidth()+" strat_x"+start_x); // TODO Auto-generated method stub super.onDraw(canvas); } }

自定义view使用动画的问题

最近在学习自定义view相关的东西,想实现一个画圆的动画,但是始终没有效果,代码如下: ``` public class AnimatorView extends View { private static final String TAG = "AnimatorView"; private Paint mPaint; private RectF mArcRectF; private ObjectAnimator mProgressAnim; private int mProgress = 0; public AnimatorView(Context context) { this(context, null); } public AnimatorView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AnimatorView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); initAnimator(); } private void init() { if(mPaint == null) mPaint = new Paint(); setLayerType(View.LAYER_TYPE_SOFTWARE, null); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(16); } private void initAnimator() { mProgressAnim = ObjectAnimator.ofInt(this, "progress", 0, 360); mProgressAnim.setDuration(5000); mProgressAnim.setInterpolator(null); } public int getProgress() { return mProgress; } public void setProgress(int progress) { mProgress = progress; invalidate(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); int centerX = width / 2; int centerY = height / 2; int offset = Math.min(centerX, centerY) / 2; mArcRectF = new RectF(centerX - offset, centerY - offset, centerX + offset, centerY + offset); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Log.d(TAG, "onDraw() ---> mProgress=" + mProgress); canvas.drawArc(mArcRectF, 90, mProgress, false, mPaint); mProgressAnim.start(); } } ``` 我的想法是通过mProgress来逐渐的将圆弧扩大,但实际效果是这个值一直为0,这个属性动画还是没搞明白

Android自定义View画笔颜色改变问题(画笔颜色改变了,但是实际上ABCD这些字母的颜色没变)

package com.eage.tbw.view; import com.eage.tbw.R; import com.eage.tbw.R.color; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; /** * A-Z字母的View * lxm */ public class LetterView extends View { private static final String[] LETTER=new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#"}; private Paint paint; private int textSize; private int choice; private TextView outerTV; private LetterOnTouchCallBack letterOnTouchCallBack; public void setTextView(TextView textView){ outerTV=textView; } public LetterView(Context context) { this(context, null); } public LetterView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public LetterView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray typedArray=context.getTheme().obtainStyledAttributes(attrs, R.styleable.LetterView, defStyleAttr, 0); textSize=typedArray.getInt(R.styleable.LetterView_text, 27); typedArray.recycle(); initView(); } private void initView() { paint=new Paint(); paint.setTextSize(textSize); paint.setColor(color.custom_yellow); paint.setAntiAlias(true); choice=-1; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int height=getHeight(); int width=getWidth(); int length=LETTER.length; int itemHeigth=height/length; for(int i=0;i<length;i++){ if(i==choice-1){ paint.setColor(color.custom_yellow); paint.setTextSize(32); }else{ paint.setColor(color.custom_yellow); paint.setTextSize(textSize); } float y=(i+1)*itemHeigth; float x=(width-paint.measureText(LETTER[i]))/2; canvas.drawText(LETTER[i], x, y, paint); } } //重写触摸事件 @Override public boolean dispatchTouchEvent(MotionEvent event) { final LetterOnTouchCallBack callBack = letterOnTouchCallBack; float y=event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_UP: choice=-1; if(outerTV!=null){ outerTV.setVisibility(View.GONE); } setBackgroundColor(Color.WHITE); invalidate(); break; default: int length=LETTER.length; int position= (int) (y/getHeight()*LETTER.length); setBackgroundColor(Color.parseColor("#E5E5E5")); if(1<=position&&position<=length){ //将选中的字母传回到MainActivity中 if(callBack!=null){ callBack.onTouchingLetterChanged(LETTER[position-1]); } if(outerTV!=null){ outerTV.setText(LETTER[position-1]); outerTV.setVisibility(View.VISIBLE); } choice=position; invalidate(); } break; } return true; } // 设置监听 public void setOnLetterCallBack(LetterOnTouchCallBack letterOnTouchCallBack) { this.letterOnTouchCallBack = letterOnTouchCallBack; } //接口 public interface LetterOnTouchCallBack { public void onTouchingLetterChanged(String s); } }

Android 自定义View 参数

这是我自定义View 的源码: public class MyView extends View { private float px; private float py; private int flag ; private Bitmap map; public MyView(Context context,float p_x,float p_y,int flag) { super(context); this.px=p_x; this.py=p_y; this.flag=flag; System.out.println(px); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); System.out.println("2"); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(flag==1){ map=BitmapFactory.decodeResource(getResources(), R.drawable.star_circle_mo); } else{ map=BitmapFactory.decodeResource(getResources(), R.drawable.star_circle_mo1); } System.out.println("p_x"+px); System.out.println("p_y"+py); canvas.drawBitmap(map, 45.0f, 180.0f, null); } } 在这里面调用它: public class PicBuyDemo extends Activity { private ImageView iv; private MyView myView; private MyView ball; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); iv=(ImageView)findViewById(R.id.iv); ball=(MyView)findViewById(R.id.myView_01); iv.setBackgroundResource(R.drawable.j1); myView =new MyView(this,80.0f,70.0f,1); iv.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { ball.setVisibility(View.VISIBLE); return false; } }); } } 布局文件: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/ll" > <ImageView android:id="@+id/iv" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <com.cyc.MyView android:id="@+id/myView_01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" > </com.cyc.MyView> </FrameLayout> 为什么在自定义View的ondraw()方法里px,py总是为0.0,flag=0

如何给自定义多边形view填充颜色

一下是我的多边形的代码 package com.example.bingyantest; import android.content.ContentValues; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.Button; /** * Created by HP on 2017/3/6. * 算法思想:每画出一条边旋转一次画布,最终旋转N次,画出N条边 * 边的计算方法:利用多边形对应的外接园半径 R */ public class MyView extends View { private Paint mpaint,npaint; private float radius, start_x, start_y, end_x, end_y; private float m = 30; private float UNIT = 360 / m; private float Xo,Yo; //用于保存起始点的数据 public MyView(Context context) { this(context, null); } public MyView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); Log.d("222", "MyView: "+UNIT); mpaint = new Paint(); npaint = new Paint(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); float mW = getMeasuredWidth(); float mH = getMeasuredHeight(); start_x = mW / 2; start_y = mH / 2; Xo = start_x; Yo = start_y; radius = Math.min(mW, mH) / 3; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mpaint.setStyle(Paint.Style.STROKE); mpaint.setStrokeWidth(6); if (m > 24) { npaint.setColor(Color.RED); canvas.drawCircle(start_x,start_y,radius,npaint); canvas.drawCircle(start_x, start_y, radius, mpaint); } else { end_x = (float) (radius * Math.sin(Math.toRadians(UNIT))); end_x = start_x + end_x; end_y = (float) (radius * Math.cos(Math.toRadians(UNIT))); end_y = start_y - end_y; for (int i = 0; i < m; i++) { canvas.save(); canvas.rotate(UNIT * i, start_x, start_y); canvas.drawLine(start_x, start_y - radius, end_x, end_y, mpaint); canvas.restore(); } } } public void refresh(float m) { this.m = m; UNIT = 360 / this.m; invalidate(); } }

android自定义控件按钮无法点击

TitleLayout.java ``` package com.example.uicustomviews; import android.app.Activity; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; public class TitleLayout extends LinearLayout { public TitleLayout(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.title, this); Button titleBack = (Button) findViewById(R.id.title_back); Button titleEdit = (Button) findViewById(R.id.title_edit); titleBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ((Activity) getContext()).finish(); } }); titleEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "You clicked Edit button", Toast.LENGTH_SHORT).show(); } }); } } ``` MainActivity.java ``` package com.example.uicustomviews; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); } } ``` title.xml ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/title_bg" > <Button android:id="@+id/title_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dip" android:background="@drawable/back_bg" android:text="Back" android:textColor="#fff" /> <TextView android:id="@+id/title_text" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="This is Title" android:textColor="#fff" android:textSize="22sp" /> <Button android:id="@+id/title_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dip" android:background="@drawable/edit_bg" android:text="Edit" android:textColor="#fff" /> </LinearLayout> ``` activity_main.xml ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/title" /> <com.example.uicustomviews.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content" > </com.example.uicustomviews.TitleLayout> </LinearLayout> ``` 求助 折腾了好久 导入别人的工程 上面这四份代码完全一样 别人的点击有反应 自己的没反应

Android 自定义ImageView出现的问题

package com.qnear.wechat; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; 这是自定义的类 来源:http://www.cnblogs.com/goagent/p/5159126.html public class ImageViewPlus extends ImageView { private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG); private Bitmap mRawBitmap; private BitmapShader mShader; private Matrix mMatrix = new Matrix(); public ImageViewPlus(Context context, AttributeSet attrs) { super(context,attrs); } @Override protected void onDraw(Canvas canvas){ Bitmap rawBitmap = getBitmap(getDrawable()); if(rawBitmap!=null){ int viewWidth = getWidth(); int viewHeight = getHeight(); int viewMinSize = Math.min(viewWidth, viewHeight); float dstWidth = viewMinSize; float dstHeight = viewMinSize; if(mShader==null||!rawBitmap.equals(mRawBitmap)){ mRawBitmap = rawBitmap; mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); } if(mShader!=null){ mMatrix.setScale(dstWidth/rawBitmap.getWidth(),dstHeight/rawBitmap.getHeight()); mShader.setLocalMatrix(mMatrix); } mPaintBitmap.setShader(mShader); float radius =viewMinSize/2.0f; canvas.drawCircle(radius,radius,radius,mPaintBitmap); }else{ super.onDraw(canvas); } } private Bitmap getBitmap(Drawable drawable) { if(drawable instanceof BitmapDrawable){ return ((BitmapDrawable) drawable).getBitmap(); }else if(drawable instanceof ColorDrawable){ Rect rect = drawable.getBounds(); int width = rect.right - rect.left; int height = rect.bottom - rect.top; int color = ((ColorDrawable) drawable).getColor(); Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawARGB(Color.alpha(color),Color.red(color),Color.blue(color),Color.green(color)); return bitmap; }else{ return null; } } } 这是引用语句: <com.qnear.wechat.ImageViewPlus android:layout_width="150dp" android:layout_height="150dp" android:src="@drawable/mwinbag" android:scaleType="centerInside" android:layout_marginTop="146dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> 然后我就遇到了这个问题: ![图片说明](https://img-ask.csdn.net/upload/201612/22/1482385305_296726.png)![图片说明](https://img-ask.csdn.net/upload/201612/22/1482385317_826178.png) 一个显示正常,一个黑屏

安卓 使用着色器LinearGradient自定义view 出现一个问题。。 求告知什么原因。。?

public class TranslucentView extends View { public TranslucentView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); LinearGradient linearGradient = new LinearGradient(0, 0, 0, getMeasuredHeight(), new int[]{ Color.parseColor("#D7FFFFFF"),Color.parseColor("#D7FFFFFF"),Color.parseColor("#00ffffff")}, null, LinearGradient.TileMode.CLAMP); paint.setShader(linearGradient); canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint); } } ``` ``` 这是一个从上到下从白色变透明的view 我这样写好了以后,把它盖在一个紫色的背景下发现这个view在简便的过程中出现了一条白色,这个是什么原因导致的呢?

Android自定义view,空指针异常求解决

``` package com.drawview.drawview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.linearlayout); LinearLayout l = (LinearLayout)findViewById(R.layout.linearlayout); DrawView dv = new DrawView(this); dv.setMinimumHeight(300); dv.setMinimumWidth(300); l.addView(dv); } } package com.drawview.drawview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class DrawView extends View{ private float currentX = 30; private float currentY = 30; Paint p = new Paint(); public DrawView(Context context) { super(context); } public DrawView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent event) { currentX = event.getX(); currentY = event.getY(); invalidate(); return true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); p.setColor(Color.MAGENTA); canvas.drawCircle(currentX,currentY,15,p); } } ``` 【错误提示】 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.addView(android.view.View)' on a null object reference at com.drawview.drawview.MainActivity.onCreate(MainActivity.java:17) 我知道错误的意思,也知道发生在哪儿,就是不知道怎么解决。

[Android界面] 新手求助:自定义控件重复显示问题

定义了一个倒计时的控件,初始显示为“开始”,点击后从10开始倒计时,一直到0。可是在控件上会额外显示一个文本,如下图 ![图片说明](https://img-ask.csdn.net/upload/201611/28/1480338890_452955.png) 额外显示的文本也会在点击开始后倒计时,找了好久一直没发现问题所在。所以请教一下各位大神。 其中自定义控件代码如下: ``` public class CustomView_A7 extends TextView{ private Paint paint = new Paint(); private Rect rect = new Rect(); private int mBackgroundColor= ContextCompat.getColor(getContext(), R.color.colorPrimary); private int mTextColor = Color.WHITE; public CustomView_A7(Context context) { super(context); } public CustomView_A7(Context context, AttributeSet attrs) { super(context, attrs); } public CustomView_A7(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); //画圆 paint.setColor(mBackgroundColor); canvas.drawCircle(getWidth()/2, getWidth()/2, getWidth()/2, paint); //画数字 paint.setColor(mTextColor); paint.setTextSize(240); String text = (String)this.getText(); paint.getTextBounds(text, 0, text.length(), rect); int textWidth = rect.width(); int textHeight = rect.height(); canvas.drawText(text, getWidth()/2 - textWidth/2, getWidth()/2 + textHeight/2, paint); } } ``` Layout中只有一个自定义控件: ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.example.administrator.androidstudyapp.CustomView_A7 android:layout_width="240dp" android:layout_height="240dp" android:layout_gravity="center" android:layout_margin="@dimen/activity_vertical_margin" android:id="@+id/customView_A7"/> </LinearLayout> ``` 难道是Activity中的问题吗,还麻烦各位帮帮忙: ``` public class Point_A7_Activity extends AppCompatActivity{ private CustomView_A7 mCustomViewA7; private int value = 10000; //10秒 Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 8888: int value = (int) msg.obj; mCustomViewA7.setText(String.valueOf(value/1000f)); if(value > 0){ Message message = handler.obtainMessage(); message.arg1 = 1; message.arg2 = 2; message.what = 8888; message.obj = value - 100; sendMessageDelayed(message, 100); } break; } } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_point_a7); mCustomViewA7 = (CustomView_A7) findViewById(R.id.customView_A7); mCustomViewA7.setText("开始"); mCustomViewA7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Message message = handler.obtainMessage(); //不要使用Message message = new Message(); message.arg1 = 1; message.arg2 = 2; message.what = 8888; message.obj = value ; handler.sendMessageDelayed(message, 100); } }); } } ```

GridView 无法显示自定义view

package com.example.image; import java.util.List; import android.content.Context; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; /** * 音效视图的适配器,将音效视图填充到GridView中 * @author lewa * */ public class MyAdapter extends BaseAdapter { private List<MyItem> list; private Context context; public MyAdapter(List list,Context context){ this.list = list; this.context = context; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ItemView itemview; if(convertView == null){ itemview = new ItemView(context); }else{ itemview = (ItemView) convertView; } itemview.imageView.setImageResource(list.get(position).getImageId()); Log.i("ymh","Position:"+position+"----List.size() = "+list.size()); itemview.textView.setText(list.get(position).getLable()); Log.i("ymh",itemview.textView.getText().toString()); itemview.setLayoutParams(new GridView.LayoutParams(85,85)); itemview.setPadding(8, 8, 8, 8); return itemview; } } ``` package com.example.image; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; /** * 音效图片和音效名称的组合view * @author lewa * */ public class ItemView extends RelativeLayout { ImageView imageView; TextView textView; private int state = 0; public ItemView(Context context) { super(context); init(context); } public ItemView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public ItemView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } private void init(Context context){ LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.item, null); imageView = (ImageView) view.findViewById(R.id.item_image); textView = (TextView) view.findViewById(R.id.item_text); } public void OnClickListener(View.OnClickListener listener){ if(state==0){ imageView.setBackgroundColor(android.graphics.Color.GREEN); state = 1; }else{ imageView.setBackgroundColor(android.graphics.Color.GRAY); } } } ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <ImageView android:id="@+id/item_image" android:layout_width="100dp" android:layout_height="100dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:src="@drawable/ic_launcher" android:padding="5dp"/> <TextView android:id="@+id/item_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@id/item_image" android:layout_alignRight="@id/item_image" android:layout_below="@+id/item_image" android:gravity="center" android:textColor="#00ffaa" android:text="textview" /> </RelativeLayout>

android 自定义属性,其中有个属性是引用图片,但实际没有引用到?求解

布局文件其中一段: <com.snd.test.view.CustomBottom android:id="@id/bottom_home_btn" android:layout_width="fill_parent" android:layout_height="fill_parent" bdm:img="@drawable/tabbar_icon_home_bg" bdm:msg="@string/guangjie" /> attrs.xml <resources> <declare-styleable name="btn"> <attr format="string" name="msg"></attr> <attr format="reference" name="img"></attr> </declare-styleable> </resources> 自定义的view: private ImageView icon; private TextView itext; public CustomBottom(Context context){ this(context,null); } public CustomBottom(Context context, AttributeSet attrs) { super(context, attrs); setGravity(Gravity.CENTER_HORIZONTAL); this.init(context); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.btn); String msg = a.getString(R.styleable.btn_msg); if (null != msg ){ this.itext.setText(msg); } this.icon.setBackgroundResource(a.getResourceId(R.styleable.btn_img, 0)); a.recycle(); } private void init(Context context){ LayoutInflater.from(context).inflate(R.layout.sdk_bottom_btn, this); this.icon = (ImageView)this.findViewById(R.id.bottom_btn_ico); this.itext = (TextView)this.findViewById(R.id.bottom_btn_text); } 问题:能显示bdm:msg="@string/guangjie",但是这个bdm:img="@drawable/tabbar_icon_home_bg"不起效果,求解?

android 自定义组合控件的问题

我想自定义一个ViewGroup,里面有4个Button,然后让它们在ViewGroup的底部显示出来,就像下图一样的: ![图片说明](https://img-ask.csdn.net/upload/201707/14/1500023444_862749.png) 但是布局的左上角总是会有一个Button,不知道为啥? ``` public class TableView extends ViewGroup { Button[] mButtons = new Button[4]; public TableView(Context context) { super(context); init(context, null, -1); } public TableView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context, attrs, -1); } public TableView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs, defStyleAttr); } private void init(Context context, AttributeSet attrs, int defStyleAttr) { setWillNotDraw(false); LayoutParams l; for (int i = 0; i < mButtons.length; i++) { mButtons[i] = new Button(context); l = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); mButtons[i].setLayoutParams(l); } mButtons[0].setText("首页"); mButtons[1].setText("上一页"); mButtons[2].setText("下一页"); mButtons[3].setText("尾页"); addView(mButtons[0]); addView(mButtons[1]); addView(mButtons[2]); addView(mButtons[3]); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); for (Button b : mButtons) { final LayoutParams lp = b.getLayoutParams(); final int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec( 0, lp.height); final int childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, 0, lp.width); b.measure(childHeightMeasureSpec, childWidthMeasureSpec); } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int totalButtonWidth = 0; for (Button bt : mButtons) { totalButtonWidth += bt.getMeasuredWidth(); } int left = (r - l - totalButtonWidth) / 2; for (Button bt : mButtons) { bt.layout(left, b - bt.getMeasuredHeight(), left + bt.getMeasuredWidth(), b); left += bt.getMeasuredWidth(); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (Button b : mButtons) { b.draw(canvas); } } } ```

Android的自定义ViewGroup addView后发现显示错误

之前的提问:http://ask.csdn.net/questions/375760 之前我以为是系统的问题,最近我发现,对于addView的情况这些不同,addView的是 view(单View)没有问题,一旦addView中,添加的是ViewGroup就会出现添加进来的 ViewGroup会在底层(在Android5.1以上的)。 希望各位大神探索一下。下面是我的代码: ```java public class MyViewGroup extends ViewGroup { public MyViewGroup(Context context) { this(context, null, 0); } public MyViewGroup(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //测量子View的大小 int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View childAt = getChildAt(i); measureChild(childAt, widthMeasureSpec, heightMeasureSpec); } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View childView = getChildAt(i); childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight()); } } } ``` 使用代码 ```java public class MainActivity extends AppCompatActivity { MyViewGroup mMyViewGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMyViewGroup = (MyViewGroup) findViewById(R.id.my_view_group); //添加第一个View final Button button = new Button(this); button.setText("第一个View"); button.setOnTouchListener(new View.OnTouchListener() { private ViewScaleHandler mViewScaleHandler; @Override public boolean onTouch(View v, MotionEvent event) { if (mViewScaleHandler == null) { mViewScaleHandler = new ViewScaleHandler(button); } return mViewScaleHandler.move(event); } }); mMyViewGroup.addView(button); //添加第二个View final Button button2 = new Button(this); button2.setBackgroundColor(Color.BLUE); button2.setText("第二个View"); button2.setOnTouchListener(new View.OnTouchListener() { private ViewScaleHandler mViewScaleHandler; @Override public boolean onTouch(View v, MotionEvent event) { if (mViewScaleHandler == null) { mViewScaleHandler = new ViewScaleHandler(button2); } return mViewScaleHandler.move(event); } }); mMyViewGroup.addView(button2); //添加第三个View //当R.layout.test_1 为单View没有出现问题,View在顶层 // final View view = LayoutInflater.from(this).inflate(R.layout.test_1, null); // view.setBackgroundColor(Color.YELLOW); // view.setOnTouchListener(new View.OnTouchListener() { // private ViewScaleHandler mViewScaleHandler; // // @Override // public boolean onTouch(View v, MotionEvent event) { // if (mViewScaleHandler == null) { // mViewScaleHandler = new ViewScaleHandler(view); // } // return mViewScaleHandler.move(event); // } // }); // mMyViewGroup.addView(view); //当R.layout.test_1 为ViewGroup出现问题,在Android5.1,这个ViewGroup在底层了 final View view = LayoutInflater.from(this).inflate(R.layout.test_2, null); view.setBackgroundColor(Color.YELLOW); view.setOnTouchListener(new View.OnTouchListener() { private ViewScaleHandler mViewScaleHandler; @Override public boolean onTouch(View v, MotionEvent event) { if (mViewScaleHandler == null) { mViewScaleHandler = new ViewScaleHandler(view); } return mViewScaleHandler.move(event); } }); mMyViewGroup.addView(view); } } ``` 现象 ![图片说明](https://img-ask.csdn.net/upload/201704/05/1491386985_820609.png) ![图片说明](https://img-ask.csdn.net/upload/201704/05/1491386998_506324.png)

自定义控件引用不到自定义的属性值

``` <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Bottom"> <attr name="oneText" format="string"/> <attr name="twoText" format="string"/> <attr name="threeText" format="string"/> <attr name="oneTextSize" format="dimension"/> <attr name="twoTextSize" format="dimension"/> <attr name="ThreeTextSize" format="dimension"/> <attr name="oneTextColor" format="color"/> <attr name="twoTextColor" format="color"/> <attr name="ThreeTextColor" format="color"/> <attr name="oneImageIcon" format="reference|color"/> <attr name="twoImageIcon" format="reference|color"/> <attr name="threeImageIcon" format="reference|color"/> <attr name="backColor" format="color"/> </declare-styleable> </resources> ``` ``` <com.example.myappzdybottom.zdy.MyBottom android:layout_width="fill_parent" android:layout_height="200dp" mybottom:oneText="第一个" mybottom:twoText="第二个" mybottom:oneTextSize="8sp" mybottom:oneTextColor="#00FFFF" mybottom:twoTextColor="#FF0000" ></com.example.myappzdybottom.zdy.MyBottom> ``` ``` public class MyBottom extends LinearLayout{ //定义自定义属性对应的控件 private TextView textview01,textview02,textview03; private ImageView imageview01,imageview02,imageview03; private String text01,text02,text03=""; private Drawable drawable01,drawable02,drawable03; private int textColor01,textColor02,textColor03,backColor; private float textSize; private LinearLayout ll01,ll02,ll03; public MyBottom(Context context, AttributeSet attrs) { super(context, attrs); //建立映射 TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attrs, R.styleable.Bottom); text01=obtainStyledAttributes.getString(R.styleable.Bottom_oneText); text02=obtainStyledAttributes.getString(R.styleable.Bottom_twoText); **_System.out.println("-----------------------------"+text01+"-----------"+text02);_** text03=obtainStyledAttributes.getString(R.styleable.Bottom_threeText); drawable01=obtainStyledAttributes.getDrawable(R.styleable.Bottom_oneImageIcon); drawable02=obtainStyledAttributes.getDrawable(R.styleable.Bottom_twoImageIcon); drawable03=obtainStyledAttributes.getDrawable(R.styleable.Bottom_threeImageIcon); textColor01=obtainStyledAttributes.getColor(R.styleable.Bottom_oneTextColor, 0); textColor02=obtainStyledAttributes.getColor(R.styleable.Bottom_twoTextColor, 0); textColor03=obtainStyledAttributes.getColor(R.styleable.Bottom_ThreeTextColor, 0); backColor=obtainStyledAttributes.getColor(R.styleable.Bottom_backColor, 0); textSize=obtainStyledAttributes.getDimension(R.styleable.Bottom_oneTextSize, 0); obtainStyledAttributes.recycle(); //实例化控件 textview01=new TextView(context); textview02=new TextView(context); textview03=new TextView(context); imageview01=new ImageView(context); imageview02=new ImageView(context); imageview03=new ImageView(context); textview01.setText(text01); textview02.setText(text02); textview03.setText(text03); textview01.setTextColor(textColor01); textview02.setTextColor(textColor02); textview03.setTextColor(textColor03); textview01.setTextSize(textSize); textview02.setTextSize(textSize); textview03.setTextSize(textSize); imageview01.setBackground(drawable01); imageview02.setBackground(drawable02); imageview03.setBackground(drawable03); LayoutParams llParams=new LayoutParams(80, LayoutParams.FILL_PARENT ); LayoutParams llParams02=new LayoutParams(150, LayoutParams.FILL_PARENT); ll01=new LinearLayout(context); ll02=new LinearLayout(context); ll03=new LinearLayout(context); ll01.setBackgroundColor(textColor01); ll02.setBackgroundColor(textColor02); setOrientation(LinearLayout.HORIZONTAL); LayoutParams textParams=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); addView(textview01,llParams); addView(textview02,llParams02); } ``` 自定义的属性 在自定义控件中使用 xml中赋值是也没报错 但是在自定义的view中使用 打印结果为null 是值引用不过来吗 求指教啊

surfaceview自定义组件利用(Context context,AttributeSet attrs)还想传递其他参数

android中利用自定义组件,我想将一个surfaceview作为组件,写到layout中,surfaceview利用(Context context,AttributeSet attrs)构造函数之后,但是,我想将调用它的activity当做参数传进来,我使用了puzzleActivity=(PuzzleActivity)context转化,发现不行,那我该怎么做? 还有,我原本利用setcontentview(),将surfaceview的实例,写进去,surfaceview中原本调用 的图片可以正常显示,但是,一旦将此surfaceview作为自定义组件,利用layout显示时,就会出现空指针的错误,只可以将图片改为几k大小,才可以,这怎么办?

如果能重来,我不会选择北漂——初见北京

一个人走的路

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

2020年大厂Java面试前复习的正确姿势(800+面试题答案解析)

前言 个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油! 本篇分享的面试题内容包括:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ...

抖音上很火的时钟效果

反正,我的抖音没人看,别人都有几十万个赞什么的。 发到CSDN上来,大家交流下~ 主要用到原生态的 JS+CSS3。 具体不解释了,看注释: &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Title&lt;/tit...

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

又出事了?网站被攻击了?高中生?

北京时间2020年3月27日9点整,如往常一样来到公司,带开电脑,正准备打开Github网站看一会源代码,再开始手头的工作。哟吼,一直打不开,一直出现如下页面: 我想很多网友也尝到了甜头,各大技术群炸开了锅,据网友反馈有攻击者正在发起大规模的中间人挟持,京东和Github等网站等网站都受到了影响。 什么是中间中间人挟持呢? 简而言之,就是攻击者在数据网络传输的过程中,截获传输过程中的数据并篡改...

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

我把华为小米年报放一起,发现华为才是真·手机公司,小米确实不靠卖手机赚钱...

郭一璞 发自 凹非寺量子位 报道 | 公众号 QbitAI国产手机界的两大玩家,华为&amp;小米,昨天在同一天前后脚发布了2019年财报。同行冤家,发财报也碰在了同一天。那我们就对比...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

十个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

文章目录前言正文**1、Kaspersky Cyberthreat real-time map****2、Finding Home****3、Silk – Interactive Generative Art****4、Liquid Particles 3D****5、WINDOWS93****6、Staggering Beauty****7、Ostagram图片生成器网址****8、全历史网址*...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

毕业5年,我熬夜整理出了这50个优质的电子书网站,吐血推荐!

大家好,我是武哥,最近经常有小伙伴问我要电子书,都什么年代了,还找不到电子书吗?如果要说原因,那就是你还没遇到武哥我(手动滑稽~)!我今天把这么多年我经常看的电子书网站整理一下给大家,基本上能解决大家的需求。不管是在校生还是已经工作了,相信肯定对你有所帮助! 1.鸠摩搜书 首先给大家推荐的网站是:鸠摩搜书 地址:https://www.jiumodiary.com/ 这个网上非常棒,上面有很多优质...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

总结了Mybatis,原来知识点也没多少嘛

看完这篇Mybatis,感觉你三天就会用了。

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

疫情后北上广深租房价格跌了吗? | Alfred数据室

去年3月份我们发布了《北上广深租房图鉴》(点击阅读),细数了北上广深租房的各种因素对租房价格的影响。一年过去了,在面临新冠疫情的后续影响、城市尚未完全恢复正常运转、学校还没开学等情况下...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

又一起程序员被抓事件

就在昨天互联网又发生一起让人心酸的程序员犯罪事件,著名的百度不限速下载软件 Pandownload PC 版作者被警方抓获。案件大致是这样的:软件的作者不仅非法盗取用户数据,还在QQ群进...

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问