Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
android-java-faq
提交
964f7f66
A
android-java-faq
项目概览
门心叼龙
/
android-java-faq
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
android-java-faq
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
964f7f66
编写于
9月 27, 2019
作者:
门心叼龙
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
code perfect
上级
bfd41e55
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
412 addition
and
3 deletion
+412
-3
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+7
-1
app/src/main/java/com/mxdl/faq/MainActivity.java
app/src/main/java/com/mxdl/faq/MainActivity.java
+48
-1
app/src/main/java/com/mxdl/faq/view/CircleView.java
app/src/main/java/com/mxdl/faq/view/CircleView.java
+61
-0
app/src/main/java/com/mxdl/faq/view/CricleActivity.java
app/src/main/java/com/mxdl/faq/view/CricleActivity.java
+15
-0
app/src/main/java/com/mxdl/faq/view/FollowText.java
app/src/main/java/com/mxdl/faq/view/FollowText.java
+5
-0
app/src/main/java/com/mxdl/faq/view/PositionViewActivity.java
...src/main/java/com/mxdl/faq/view/PositionViewActivity.java
+78
-0
app/src/main/java/com/mxdl/faq/view/WindowTest.java
app/src/main/java/com/mxdl/faq/view/WindowTest.java
+107
-0
app/src/main/res/layout/activity_cricle.xml
app/src/main/res/layout/activity_cricle.xml
+15
-0
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_main.xml
+21
-1
app/src/main/res/layout/activity_position_view.xml
app/src/main/res/layout/activity_position_view.xml
+40
-0
app/src/main/res/layout/activity_window_test.xml
app/src/main/res/layout/activity_window_test.xml
+15
-0
未找到文件。
app/src/main/AndroidManifest.xml
浏览文件 @
964f7f66
...
...
@@ -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"
>
...
...
app/src/main/java/com/mxdl/faq/MainActivity.java
浏览文件 @
964f7f66
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
();
}
/**
...
...
app/src/main/java/com/mxdl/faq/view/CircleView.java
0 → 100644
浏览文件 @
964f7f66
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
);
}
}
}
app/src/main/java/com/mxdl/faq/view/CricleActivity.java
0 → 100644
浏览文件 @
964f7f66
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
);
}
}
app/src/main/java/com/mxdl/faq/view/FollowText.java
浏览文件 @
964f7f66
...
...
@@ -79,4 +79,9 @@ public class FollowText extends TextView {
return
true
;
}
@Override
protected
void
onDetachedFromWindow
()
{
super
.
onDetachedFromWindow
();
}
}
app/src/main/java/com/mxdl/faq/view/PositionViewActivity.java
0 → 100644
浏览文件 @
964f7f66
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"
,
"========================================"
);
}
}
app/src/main/java/com/mxdl/faq/view/WindowTest.java
0 → 100644
浏览文件 @
964f7f66
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
();
}
}
app/src/main/res/layout/activity_cricle.xml
0 → 100644
浏览文件 @
964f7f66
<?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
app/src/main/res/layout/activity_main.xml
浏览文件 @
964f7f66
...
...
@@ -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"
/>
...
...
app/src/main/res/layout/activity_position_view.xml
0 → 100644
浏览文件 @
964f7f66
<?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
app/src/main/res/layout/activity_window_test.xml
0 → 100644
浏览文件 @
964f7f66
<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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录