package bwie.com.lianxi201830_01; import android.content.Context; import android.content.res.TypedArray; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class AddAndDelete extends LinearLayout { private ImageView jia_add; private ImageView jian_delete; private int u; private TextView number; public AddAndDelete(Context context) { this(context,null); } public AddAndDelete(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public AddAndDelete(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initview(context,attrs); } private void initview(Context context, AttributeSet attrs) { //布局 inflate(context,R.layout.add_and_delete,this); //控件 jia_add = findViewById(R.id.jia); jian_delete = findViewById(R.id.jian); number = findViewById(R.id.number); //获取属性值 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddAndDelete); int numarray = typedArray.getInteger(R.styleable.AddAndDelete_num_shu, 0); typedArray.recycle(); //点击事件 jia_add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { u++; number.setText(u+""); if (addandDeleteCallback!=null){ addandDeleteCallback.showNum(u); } } }); jian_delete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(u>1){ u--; number.setText(u+""); if (addandDeleteCallback!=null){ addandDeleteCallback.showNum(u); } } } }); } private AddandDeleteCallback addandDeleteCallback; public void setAddandDeleteCallback(AddandDeleteCallback addandDeleteCallback) { this.addandDeleteCallback = addandDeleteCallback; } public interface AddandDeleteCallback{ void showNum(int shopNum); } }
package bwie.com.lianxi201830_01; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private MyShapeView myShapeView ; private MyView myView; private AddAndDelete addAndDelete; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myShapeView = findViewById(R.id.my_shape); myShapeView.setSearchLinstener(new MyShapeView.SearchLinstener() { @Override public void onSearch(String context) { Toast.makeText(MainActivity.this, "搜索内容是:" + context, Toast.LENGTH_SHORT).show(); } }); myView = findViewById(R.id.myview); myView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(MainActivity.this,ThirdActivity.class); startActivity(intent); } }); addAndDelete = findViewById(R.id.adddelete); addAndDelete.setAddandDeleteCallback(new AddAndDelete.AddandDeleteCallback() { @Override public void showNum(int shopNum) { Toast.makeText(MainActivity.this,"当前商品数量是"+shopNum,Toast.LENGTH_SHORT).show(); } }); } }
package bwie.com.lianxi201830_01; import android.content.Context; import android.content.res.TypedArray; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; public class MyShapeView extends LinearLayout { private ImageView t_img; private EditText t_edit; private TypedArray typedArray; private String typestring = ""; public MyShapeView(Context context) { this(context,null); } public MyShapeView(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public MyShapeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //布局 inflate(context,R.layout.title_tou,this); //控件 t_img = findViewById(R.id.t_img1); t_edit = findViewById(R.id.t_edit); //读取属性 typedArray = context.obtainStyledAttributes(attrs, R.styleable.MySearchView); typestring = typedArray.getString(R.styleable.MySearchView_search_hint); typedArray.recycle(); // 把读取到的属性值设置到 显示页面 if (!TextUtils.isEmpty(typestring)) { t_edit.setHint(typestring); } //设置点击事件 t_img.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (searchLinstener!=null){ String editstring = t_edit.getText().toString(); if (!TextUtils.isEmpty(editstring)){ searchLinstener.onSearch(editstring); } } } }); } private SearchLinstener searchLinstener; public void setSearchLinstener(SearchLinstener searchLinstener) { this.searchLinstener = searchLinstener; } public interface SearchLinstener{ void onSearch(String context); } }
package bwie.com.lianxi201830_01; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; public class MyView extends View { private Paint paint; public MyView(Context context) { super(context); } public MyView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); paint = new Paint(); paint.setColor(Color.RED); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(100,100,60,paint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
package bwie.com.lianxi201830_01; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; public class ThirdActivity extends AppCompatActivity { private ThridLayout thridLayout; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); thridLayout = findViewById(R.id.flowlayout); button = findViewById(R.id.btn_remeasure); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { thridLayout.requestLayout(); } }); } }
package bwie.com.lianxi201830_01; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.ViewGroup; public class ThridLayout extends ViewGroup{ private static final String TAG = "ThridLayout"; public ThridLayout(Context context) { this(context,null); } public ThridLayout(Context context, AttributeSet attrs) { this(context, attrs,0); } public ThridLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } //画布 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Log.i(TAG,"onDraw"); } // //测量 // @Override // protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // super.onMeasure(widthMeasureSpec, heightMeasureSpec); // Log.i(TAG,"onMeasure"); // } //布局 @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { Log.i(TAG,"onLayout") ; int childCount = getChildCount(); int measuredWidth = getMeasuredWidth(); int measuredHeight = getMeasuredHeight(); measureChildren(measuredWidth,measuredHeight); int mpleft=0; int mptop=0; int maxHeight=0; for (int i = 0; i < childCount; i++) { View v = getChildAt(i); maxHeight = Math.max(maxHeight, v.getMeasuredHeight()); //换行 if (mpleft+v.getMeasuredWidth()>measuredWidth){ mpleft=0; mptop+=maxHeight; maxHeight=0; } v.layout(mpleft,mptop,mpleft+v.getMeasuredWidth(),mptop+v.getMeasuredHeight()); mpleft+=v.getMeasuredWidth(); } } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn_remeasure" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点" /> <bwie.com.lianxi201830_01.ThridLayout android:id="@+id/flowlayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#00FF00"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电子" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="衣服" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="手机" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电脑" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电脑" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电脑" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电脑" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电脑" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电脑" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电脑" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电脑" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="电脑" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="手机" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="手机哈哈" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="手机啊 " android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="手机人人" android:textSize="20sp" /> </bwie.com.lianxi201830_01.ThridLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="@drawable/shape_bg" android:gravity="center" android:layout_height="wrap_content"> <ImageView android:id="@+id/t_img1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/a_4" android:padding="8dp" /> <EditText android:id="@+id/t_edit" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@null" android:hint="京东抢购日" /> <ImageView android:id="@+id/t_img2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/root" android:padding="8dp" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <bwie.com.lianxi201830_01.MyShapeView android:id="@+id/my_shape" android:layout_width="match_parent" android:layout_height="wrap_content"> </bwie.com.lianxi201830_01.MyShapeView> <bwie.com.lianxi201830_01.MyView android:id="@+id/myview" android:layout_width="match_parent" android:layout_height="150dp" /> <bwie.com.lianxi201830_01.AddAndDelete android:id="@+id/adddelete" android:layout_width="wrap_content" android:layout_height="wrap_content"> </bwie.com.lianxi201830_01.AddAndDelete> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- 自定义属性 --> <declare-styleable name="MySearchView"> <attr name="search_hint" format="string" /> </declare-styleable> <declare-styleable name="AddAndDelete"> <attr name="num_shu" format="integer"/> </declare-styleable> </resources>