提交 964f7f66 编写于 作者: 门心叼龙's avatar 门心叼龙

code perfect

上级 bfd41e55
......@@ -4,7 +4,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application
android:name=".MyApplication"
android:allowBackup="true"
......@@ -13,6 +13,12 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".view.WindowTest">
</activity>
<activity android:name=".view.CricleActivity">
</activity>
<activity android:name=".view.PositionViewActivity">
</activity>
<activity android:name=".view.ScrollViewPagerActivity1">
</activity>
<activity android:name=".view.ScrollViewPagerActivity">
......
package com.mxdl.faq;
import android.Manifest;
import android.animation.IntEvaluator;
import android.animation.ObjectAnimator;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;
import android.os.Debug;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.content.res.AppCompatResources;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.mxdl.faq.view.CricleActivity;
import com.mxdl.faq.view.PositionViewActivity;
import com.mxdl.faq.view.ScrollViewPagerActivity;
import com.mxdl.faq.view.ScrollViewPagerActivity1;
import com.mxdl.faq.view.WindowTest;
import com.tbruyelle.rxpermissions2.RxPermissions;
import java.io.File;
......@@ -48,6 +63,11 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
private Button mBtnScroll;
private Button mBtnScroll1;
private TextView mTxtHello;
private Button mBtnPositon;
private Button mBtnCricle;
private IntEvaluator mEvaluator = new IntEvaluator();
private Button mBtnWindow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -62,6 +82,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
mTxtHello = findViewById(R.id.txt_hello);
mBtnScroll = findViewById(R.id.btn_my_scroll);
mBtnScroll1 = findViewById(R.id.btn_my_scroll1);
mBtnPositon = findViewById(R.id.btn_position);
mBtnCricle = findViewById(R.id.btn_cricle);
mBtnWindow = findViewById(R.id.btn_window);
mBtnStrictMode.setOnClickListener(this);
mBtnHuGo.setOnClickListener(this);
......@@ -70,6 +93,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
mBtnTraceView.setOnClickListener(this);
mBtnScroll.setOnClickListener(this);
mBtnScroll1.setOnClickListener(this);
mBtnPositon.setOnClickListener(this);
mBtnCricle.setOnClickListener(this);
mBtnWindow.setOnClickListener(this);
new RxPermissions(this).request(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe(new Consumer<Boolean>() {
@Override
......@@ -79,7 +105,18 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
}
}
});
// ValueAnimator valueAnimator = ValueAnimator.ofObject(new TypeEvaluator<Float>() {
// @Override
// public Float evaluate(float fraction, Float startValue, Float endValue) {
// float v = startValue + fraction * (endValue - startValue);
// Log.v("MYTAG","v:"+v);
// return v;
// }
// },1f,100f);
// valueAnimator.setInterpolator(new LinearInterpolator());
// valueAnimator.setDuration(1000 * 5);
// valueAnimator.start();
// ObjectAnimator.ofFloat(new Object(),"abc",1,2).start();
}
......@@ -124,6 +161,15 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
case R.id.btn_my_scroll1:
startActivity(new Intent(this, ScrollViewPagerActivity1.class));
break;
case R.id.btn_position:
startActivity(new Intent(this, PositionViewActivity.class));
break;
case R.id.btn_cricle:
startActivity(new Intent(MainActivity.this, CricleActivity.class));
break;
case R.id.btn_window:
startActivity(new Intent(MainActivity.this, WindowTest.class));
break;
}
}
......@@ -132,6 +178,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
Debug.startMethodTracing("custom");
startTrace();
Debug.stopMethodTracing();
}
/**
......
package com.mxdl.faq.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
/**
* Description: <CircleView><br>
* Author: mxdl<br>
* Date: 2019/9/25<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class CircleView extends View {
private int mColor = Color.RED;
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public CircleView(Context context) {
super(context);
init();
}
public CircleView(Context context, AttributeSet attrs) {
super(context,attrs);
init();
}
public CircleView(Context context,AttributeSet attrs,int defStyleAttr) {
super(context,attrs,defStyleAttr);
init();
}
private void init() {
mPaint.setColor(mColor);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth() - getPaddingLeft() - getPaddingRight();
int height = getHeight() - getPaddingTop() - getPaddingBottom();
int radius = Math.min(width,height) / 2;
canvas.drawCircle(getPaddingLeft()+width / 2,getPaddingTop() + height / 2,radius,mPaint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);
if(widthSpecMode == MeasureSpec.AT_MOST && heightSpecMode == MeasureSpec.AT_MOST){
setMeasuredDimension(200,200);
}else if(widthSpecMode == MeasureSpec.AT_MOST){
setMeasuredDimension(200,heightSpecSize);
}else if(heightSpecMode == MeasureSpec.AT_MOST){
setMeasuredDimension(widthSpecSize,200);
}
}
}
package com.mxdl.faq.view;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.mxdl.faq.R;
public class CricleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cricle);
}
}
......@@ -79,4 +79,9 @@ public class FollowText extends TextView {
return true;
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
}
package com.mxdl.faq.view;
import android.animation.ObjectAnimator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.RemoteViews;
import android.widget.TextView;
import com.mxdl.faq.R;
public class PositionViewActivity extends AppCompatActivity implements View.OnClickListener {
private TextView mTxtContent;
private Button mBtnTest;
private Button mBtnMove;
private ViewGroup mViewGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_position_view);
mTxtContent = findViewById(R.id.btn_content);
mBtnTest = findViewById(R.id.btn_test);
mBtnMove = findViewById(R.id.btn_move);
mBtnTest.setOnClickListener(this);
mBtnMove.setOnClickListener(this);
mTxtContent.post(new Runnable() {
@Override
public void run() {
test();
}
});
ViewTreeObserver viewTreeObserver = mTxtContent.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
}
});
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.v("MYTAG","onWindowFocusChanged start:"+hasFocus);
if(hasFocus){
test();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_test:
test();
break;
case R.id.btn_move:
ObjectAnimator.ofFloat(mTxtContent,View.TRANSLATION_X,50).setDuration(1000).start();
ObjectAnimator.ofFloat(mTxtContent,View.TRANSLATION_Y,100).setDuration(1000).start();
break;
}
}
private void test() {
Log.v("MYTAG", "left:" + mTxtContent.getLeft() + ";top:" + mTxtContent.getTop() + ";right:" + mTxtContent.getRight() + ";bottom:" + mTxtContent.getBottom());
Log.v("MYTAG", "x:" + mTxtContent.getX() + ";y:" + mTxtContent.getY());
Log.v("MYTAG", "transX:" + mTxtContent.getTranslationX() + ";transY:" + mTxtContent.getTranslationY());
Log.v("MYTAG", "========================================");
}
}
package com.mxdl.faq.view;
import android.app.IntentService;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.MessageQueue;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import com.mxdl.faq.R;
public class WindowTest extends AppCompatActivity implements View.OnTouchListener {
private static final String TAG = "TestActivity";
private Button mCreateWindowButton;
private Button mFloatingButton;
private WindowManager.LayoutParams mLayoutParams;
private WindowManager mWindowManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_window_test);
initView();
HandlerThread thread = new HandlerThread("aaa");
thread.start();
Handler handler = new Handler(thread.getLooper()){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.v("MYTAG","thread:"+Thread.currentThread().getName());
}
};
handler.sendEmptyMessage(1);
IntentService intentService;
}
private void initView() {
mCreateWindowButton = (Button) findViewById(R.id.button1);
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
}
public void onButtonClick(View v) {
if (v == mCreateWindowButton) {
mFloatingButton = new Button(this);
mFloatingButton.setText("click me");
mLayoutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, 0, 0, PixelFormat.RGB_565);
mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
mLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;
mLayoutParams.x = 100;
mLayoutParams.y = 300;
mFloatingButton.setOnTouchListener(this);
mWindowManager.addView(mFloatingButton, mLayoutParams);
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
break;
}
case MotionEvent.ACTION_MOVE: {
int x = (int) event.getX();
int y = (int) event.getY();
mLayoutParams.x = rawX;
mLayoutParams.y = rawY;
mWindowManager.updateViewLayout(mFloatingButton, mLayoutParams);
break;
}
case MotionEvent.ACTION_UP: {
break;
}
default:
break;
}
return false;
}
@Override
protected void onDestroy() {
try {
mWindowManager.removeView(mFloatingButton);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
super.onDestroy();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical" >
<com.mxdl.faq.view.CircleView
android:id="@+id/circleView1"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:layout_margin="20dp"
android:padding="20dp"
android:background="#000000"/>
</LinearLayout>
\ No newline at end of file
......@@ -59,10 +59,30 @@
android:text="滑动冲突1"
android:textAllCaps="true"
/>
<Button
android:id="@+id/btn_position"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="位置测试"
/>
<Button
android:id="@+id/btn_cricle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="自定义View测试"
/>
<Button
android:id="@+id/btn_window"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="window测试"
/>
<TextView
android:id="@+id/txt_hello"
android:layout_width="wrap_content"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:gravity="bottom"
android:text="hello world"
/>
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="20dp"
android:layout_marginLeft="40dp"
>
<TextView
android:id="@+id/btn_content"
android:layout_width="100dp"
android:layout_height="50dp"
android:text="Hello world"
android:textColor="#FFFFFF"
android:gravity="center"
android:background="#000000"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
/>
</LinearLayout>
<Button
android:id="@+id/btn_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="位置测试"
android:layout_centerInParent="true"
/>
<Button
android:id="@+id/btn_move"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开始位移"
android:layout_below="@+id/btn_test"
/>
</RelativeLayout>
\ No newline at end of file
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10px" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onButtonClick"
android:text="Button" />
</LinearLayout>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册