Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOMobile
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fallenstardust
YGOMobile
Commits
467d7a14
Commit
467d7a14
authored
Jun 28, 2022
by
fallenstardust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加萌卡新闻轮播图
parent
e8db0845
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
897 additions
and
19 deletions
+897
-19
mobile/src/main/java/cn/garymb/ygomobile/bean/Header.java
mobile/src/main/java/cn/garymb/ygomobile/bean/Header.java
+44
-0
mobile/src/main/java/cn/garymb/ygomobile/ui/home/HomeActivity.java
...c/main/java/cn/garymb/ygomobile/ui/home/HomeActivity.java
+2
-2
mobile/src/main/java/cn/garymb/ygomobile/ui/home/HomeFragment.java
...c/main/java/cn/garymb/ygomobile/ui/home/HomeFragment.java
+118
-13
mobile/src/main/java/cn/garymb/ygomobile/ui/mycard/McNews.java
...e/src/main/java/cn/garymb/ygomobile/ui/mycard/McNews.java
+83
-0
mobile/src/main/java/cn/garymb/ygomobile/ui/mycard/MyCard.java
...e/src/main/java/cn/garymb/ygomobile/ui/mycard/MyCard.java
+96
-4
mobile/src/main/java/cn/garymb/ygomobile/ui/mycard/mcchat/util/ImageUtil.java
.../cn/garymb/ygomobile/ui/mycard/mcchat/util/ImageUtil.java
+27
-0
mobile/src/main/java/cn/garymb/ygomobile/utils/JsonUtil.java
mobile/src/main/java/cn/garymb/ygomobile/utils/JsonUtil.java
+89
-0
mobile/src/main/java/cn/garymb/ygomobile/utils/OkhttpUtil.java
...e/src/main/java/cn/garymb/ygomobile/utils/OkhttpUtil.java
+300
-0
mobile/src/main/java/cn/garymb/ygomobile/utils/PaletteUtil.java
.../src/main/java/cn/garymb/ygomobile/utils/PaletteUtil.java
+67
-0
mobile/src/main/res/drawable-xhdpi/mycard.png
mobile/src/main/res/drawable-xhdpi/mycard.png
+0
-0
mobile/src/main/res/layout/item_banner_main.xml
mobile/src/main/res/layout/item_banner_main.xml
+71
-0
No files found.
mobile/src/main/java/cn/garymb/ygomobile/bean/Header.java
0 → 100644
View file @
467d7a14
package
cn.garymb.ygomobile.bean
;
/**
* Create By feihua On 2021/11/8
*/
public
class
Header
{
public
static
final
String
HEADER_AUTHORIZATION
=
"Authorization"
;
public
static
final
int
HEADER_POSITION_AUTHORIZATION
=
0
;
private
String
name
;
private
String
value
;
public
Header
(
int
namePosition
,
String
value
)
{
this
.
value
=
value
;
setName
(
namePosition
);
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
int
namePosition
)
{
switch
(
namePosition
)
{
case
HEADER_POSITION_AUTHORIZATION:
this
.
name
=
HEADER_AUTHORIZATION
;
break
;
default
:
this
.
name
=
""
;
}
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getValue
()
{
return
value
;
}
public
void
setValue
(
String
value
)
{
this
.
value
=
value
;
}
}
mobile/src/main/java/cn/garymb/ygomobile/ui/home/HomeActivity.java
View file @
467d7a14
...
...
@@ -106,8 +106,8 @@ public abstract class HomeActivity extends BaseActivity implements OnDuelAssista
bottomNavigationBar
.
addItem
(
new
BottomNavigationItem
(
R
.
drawable
.
ic_home
,
R
.
string
.
mc_home
))
.
addItem
(
new
BottomNavigationItem
(
R
.
drawable
.
ic_search
,
R
.
string
.
search
))
.
addItem
(
new
BottomNavigationItem
(
R
.
drawable
.
ic_a
lbum
,
R
.
string
.
deck_manager
))
.
addItem
(
new
BottomNavigationItem
(
R
.
drawable
.
ic_ad
d
,
R
.
string
.
mycard
))
.
addItem
(
new
BottomNavigationItem
(
R
.
drawable
.
ic_a
dd
,
R
.
string
.
deck_manager
))
.
addItem
(
new
BottomNavigationItem
(
R
.
drawable
.
mycar
d
,
R
.
string
.
mycard
))
.
addItem
(
new
BottomNavigationItem
(
R
.
drawable
.
ic_settings
,
R
.
string
.
settings
))
.
setActiveColor
(
R
.
color
.
holo_blue_bright
)
.
setBarBackgroundColor
(
R
.
color
.
transparent
)
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/home/HomeFragment.java
View file @
467d7a14
...
...
@@ -6,10 +6,13 @@ import static cn.garymb.ygomobile.Constants.ORI_PICS;
import
static
cn
.
garymb
.
ygomobile
.
Constants
.
ORI_REPLAY
;
import
static
cn
.
garymb
.
ygomobile
.
ui
.
home
.
ResCheckTask
.
getDatapath
;
import
android.annotation.SuppressLint
;
import
android.content.Intent
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Message
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.util.SparseArray
;
...
...
@@ -20,6 +23,7 @@ import android.view.ViewGroup;
import
android.view.inputmethod.EditorInfo
;
import
android.widget.Button
;
import
android.widget.EditText
;
import
android.widget.ImageView
;
import
android.widget.ListView
;
import
android.widget.TextView
;
import
android.widget.Toast
;
...
...
@@ -30,6 +34,7 @@ import androidx.cardview.widget.CardView;
import
androidx.recyclerview.widget.DividerItemDecoration
;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
com.stx.xhb.androidx.XBanner
;
import
com.tubb.smrv.SwipeMenuRecyclerView
;
import
org.greenrobot.eventbus.EventBus
;
...
...
@@ -39,6 +44,7 @@ import org.greenrobot.eventbus.ThreadMode;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
cn.garymb.ygodata.YGOGameOptions
;
...
...
@@ -53,14 +59,15 @@ import cn.garymb.ygomobile.bean.events.ServerInfoEvent;
import
cn.garymb.ygomobile.lite.BuildConfig
;
import
cn.garymb.ygomobile.lite.R
;
import
cn.garymb.ygomobile.loader.ImageLoader
;
import
cn.garymb.ygomobile.ui.activities.FileLogActivity
;
import
cn.garymb.ygomobile.ui.activities.WebActivity
;
import
cn.garymb.ygomobile.ui.adapters.ServerListAdapter
;
import
cn.garymb.ygomobile.ui.adapters.SimpleListAdapter
;
import
cn.garymb.ygomobile.ui.cards.CardDetailRandom
;
import
cn.garymb.ygomobile.ui.mycard.McNews
;
import
cn.garymb.ygomobile.ui.mycard.MyCard
;
import
cn.garymb.ygomobile.ui.mycard.mcchat.util.ImageUtil
;
import
cn.garymb.ygomobile.ui.plus.DialogPlus
;
import
cn.garymb.ygomobile.ui.plus.VUiKit
;
import
cn.garymb.ygomobile.ui.preference.SettingsActivity
;
import
cn.garymb.ygomobile.ui.widget.Shimmer
;
import
cn.garymb.ygomobile.ui.widget.ShimmerTextView
;
import
cn.garymb.ygomobile.utils.FileUtils
;
...
...
@@ -72,6 +79,13 @@ import ocgcore.data.Card;
public
class
HomeFragment
extends
BaseFragemnt
implements
View
.
OnClickListener
{
private
static
final
int
ID_HOMEFRAGMENT
=
0
;
private
static
final
int
TYPE_BANNER_QUERY_OK
=
0
;
private
static
final
int
TYPE_BANNER_QUERY_EXCEPTION
=
1
;
private
static
final
int
TYPE_RES_LOADING_OK
=
2
;
private
static
final
String
ARG_MC_NEWS_LIST
=
"mcNewsList"
;
private
boolean
isMcNewsLoadException
=
false
;
ShimmerTextView
tv
;
Shimmer
shimmer
;
protected
SwipeMenuRecyclerView
mServerList
;
...
...
@@ -80,17 +94,22 @@ public class HomeFragment extends BaseFragemnt implements View.OnClickListener {
private
CardManager
mCardManager
;
private
CardDetailRandom
mCardDetailRandom
;
private
ImageLoader
mImageLoader
;
//轮播图
private
CardView
cv_banner
;
private
TextView
tv_banner_loading
;
private
XBanner
xb_banner
;
private
ArrayList
<
McNews
>
mcNewsList
;
//ygopro功能
CardView
cv_game
;
CardView
cv_bot_game
;
CardView
cv_watch_replay
;
private
CardView
cv_game
;
private
CardView
cv_bot_game
;
private
CardView
cv_watch_replay
;
//辅助功能
CardView
cv_download_ex
;
CardView
cv_reset_res
;
private
CardView
cv_download_ex
;
private
CardView
cv_reset_res
;
//外连
CardView
cv_donation
;
CardView
cv_join_QQ
;
CardView
cv_help
;
private
CardView
cv_donation
;
private
CardView
cv_join_QQ
;
private
CardView
cv_help
;
@Nullable
@Override
...
...
@@ -101,8 +120,8 @@ public class HomeFragment extends BaseFragemnt implements View.OnClickListener {
layoutView
=
inflater
.
inflate
(
R
.
layout
.
main_horizontal_fragment
,
container
,
false
);
else
layoutView
=
inflater
.
inflate
(
R
.
layout
.
fragment_home
,
container
,
false
);
initView
(
layoutView
,
savedInstanceState
);
initBanner
(
layoutView
,
savedInstanceState
);
initView
(
layoutView
);
//event
if
(!
EventBus
.
getDefault
().
isRegistered
(
this
)){
//加上判断
EventBus
.
getDefault
().
register
(
this
);
...
...
@@ -110,7 +129,7 @@ public class HomeFragment extends BaseFragemnt implements View.OnClickListener {
return
layoutView
;
}
private
void
initView
(
View
view
,
Bundle
saveBundle
)
{
private
void
initView
(
View
view
)
{
//服务器列表
mServerList
=
view
.
findViewById
(
R
.
id
.
list_server
);
mServerListAdapter
=
new
ServerListAdapter
(
getContext
());
...
...
@@ -165,6 +184,88 @@ public class HomeFragment extends BaseFragemnt implements View.OnClickListener {
mCardManager
=
DataManager
.
get
().
getCardManager
();
}
//轮播图
public
void
initBanner
(
View
view
,
Bundle
saveBundle
){
xb_banner
=
view
.
findViewById
(
R
.
id
.
xb_banner
);
cv_banner
=
view
.
findViewById
(
R
.
id
.
cv_banner
);
tv_banner_loading
=
view
.
findViewById
(
R
.
id
.
tv_banner_loading
);
tv_banner_loading
.
setOnClickListener
(
this
);
cv_banner
.
post
(()
->
{
ViewGroup
.
LayoutParams
layoutParams
=
cv_banner
.
getLayoutParams
();
layoutParams
.
width
=
cv_banner
.
getWidth
();
layoutParams
.
height
=
layoutParams
.
width
/
3
;
cv_banner
.
setLayoutParams
(
layoutParams
);
});
xb_banner
.
setOnItemClickListener
((
banner
,
model
,
v
,
position
)
->
WebActivity
.
open
(
getContext
(),
"新闻"
,
mcNewsList
.
get
(
position
).
getNews_url
())
);
xb_banner
.
loadImage
((
banner
,
model
,
v
,
position
)
->
{
TextView
tv_time
,
tv_title
,
tv_type
;
ImageView
iv_image
;
tv_time
=
v
.
findViewById
(
R
.
id
.
tv_time
);
tv_title
=
v
.
findViewById
(
R
.
id
.
tv_title
);
tv_type
=
v
.
findViewById
(
R
.
id
.
tv_type
);
iv_image
=
v
.
findViewById
(
R
.
id
.
iv_image
);
McNews
mcNews
=
mcNewsList
.
get
(
position
);
ImageUtil
.
setImageAndBackground
(
getContext
(),
mcNews
.
getImage_url
(),
iv_image
);
tv_time
.
setText
(
mcNews
.
getCreate_time
());
tv_title
.
setText
(
mcNews
.
getTitle
());
tv_type
.
setVisibility
(
View
.
GONE
);
});
if
(
saveBundle
==
null
)
{
findMcNews
();
}
else
{
HomeFragment
.
this
.
mcNewsList
=
(
ArrayList
<
McNews
>)
saveBundle
.
getSerializable
(
ARG_MC_NEWS_LIST
);
if
(
mcNewsList
!=
null
)
handler
.
sendEmptyMessage
(
TYPE_BANNER_QUERY_OK
);
else
findMcNews
();
handler
.
sendEmptyMessage
(
TYPE_RES_LOADING_OK
);
}
}
@SuppressLint
(
"HandlerLeak"
)
Handler
handler
=
new
Handler
()
{
@Override
public
void
handleMessage
(
Message
msg
)
{
super
.
handleMessage
(
msg
);
switch
(
msg
.
what
)
{
case
TYPE_BANNER_QUERY_OK:
tv_banner_loading
.
setVisibility
(
View
.
GONE
);
xb_banner
.
setBannerData
(
R
.
layout
.
item_banner_main
,
mcNewsList
);
break
;
case
TYPE_BANNER_QUERY_EXCEPTION:
tv_banner_loading
.
setText
(
"加载失败,点击重试"
);
isMcNewsLoadException
=
true
;
break
;
}
}
};
private
void
findMcNews
()
{
isMcNewsLoadException
=
false
;
tv_banner_loading
.
setVisibility
(
View
.
VISIBLE
);
tv_banner_loading
.
setText
(
"加载中"
);
MyCard
.
findMyCardNews
((
myCardNewsList
,
exception
)
->
{
Message
message
=
new
Message
();
if
(
TextUtils
.
isEmpty
(
exception
))
{
while
(
myCardNewsList
.
size
()
>
5
)
{
myCardNewsList
.
remove
(
myCardNewsList
.
size
()
-
1
);
}
HomeFragment
.
this
.
mcNewsList
=
(
ArrayList
<
McNews
>)
myCardNewsList
;
message
.
what
=
TYPE_BANNER_QUERY_OK
;
}
else
{
Log
.
e
(
"HomeFragemnt"
,
"查询失败"
+
exception
);
message
.
obj
=
exception
;
message
.
what
=
TYPE_BANNER_QUERY_EXCEPTION
;
}
handler
.
sendMessage
(
message
);
});
}
public
void
joinRoom
(
int
position
)
{
ServerInfo
serverInfo
=
mServerListAdapter
.
getItem
(
position
);
if
(
serverInfo
==
null
)
{
...
...
@@ -561,6 +662,10 @@ public class HomeFragment extends BaseFragemnt implements View.OnClickListener {
startActivity
(
intent
);
}
break
;
case
R
.
id
.
tv_banner_loading
:
if
(
isMcNewsLoadException
)
findMcNews
();
break
;
}
}
}
mobile/src/main/java/cn/garymb/ygomobile/ui/mycard/McNews.java
0 → 100644
View file @
467d7a14
package
cn.garymb.ygomobile.ui.mycard
;
import
com.stx.xhb.androidx.entity.BaseBannerInfo
;
import
java.io.Serializable
;
public
class
McNews
implements
BaseBannerInfo
,
Serializable
{
private
String
id
;
private
String
title
;
private
String
message
;
private
String
news_url
;
private
String
image_url
;
private
int
type
;
private
String
create_time
;
public
String
getId
()
{
return
id
;
}
public
void
setId
(
String
id
)
{
this
.
id
=
id
;
setNews_url
(
MyCard
.
getMycardPostUrl
(
id
));
}
public
String
getMessage
()
{
return
message
;
}
public
void
setMessage
(
String
message
)
{
this
.
message
=
message
;
}
public
String
getCreate_time
()
{
return
create_time
;
}
public
void
setCreate_time
(
String
create_time
)
{
this
.
create_time
=
create_time
;
}
public
String
getTitle
()
{
return
title
;
}
public
void
setTitle
(
String
title
)
{
this
.
title
=
title
;
}
public
String
getNews_url
()
{
return
news_url
;
}
public
void
setNews_url
(
String
news_url
)
{
this
.
news_url
=
news_url
;
}
public
String
getImage_url
()
{
return
image_url
;
}
public
void
setImage_url
(
String
image_url
)
{
this
.
image_url
=
image_url
;
}
public
int
getType
()
{
return
type
;
}
public
void
setType
(
int
type
)
{
this
.
type
=
type
;
}
@Override
public
Object
getXBannerUrl
()
{
return
null
;
}
@Override
public
String
getXBannerTitle
()
{
return
title
;
}
}
mobile/src/main/java/cn/garymb/ygomobile/ui/mycard/MyCard.java
View file @
467d7a14
package
cn.garymb.ygomobile.ui.mycard
;
import
static
junit
.
framework
.
Assert
.
assertEquals
;
import
android.annotation.SuppressLint
;
import
android.app.Activity
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.SharedPreferences
;
import
android.net.Uri
;
import
android.os.Environment
;
import
android.text.TextUtils
;
import
android.util.Base64
;
import
android.util.Log
;
...
...
@@ -14,6 +16,7 @@ import android.webkit.JavascriptInterface;
import
com.tencent.smtt.sdk.WebView
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
java.io.BufferedInputStream
;
import
java.io.File
;
...
...
@@ -25,14 +28,17 @@ import java.util.ArrayList;
import
java.util.List
;
import
cn.garymb.ygodata.YGOGameOptions
;
import
cn.garymb.ygomobile.App
;
import
cn.garymb.ygomobile.AppsSettings
;
import
cn.garymb.ygomobile.YGOStarter
;
import
cn.garymb.ygomobile.bean.events.DeckFile
;
import
cn.garymb.ygomobile.ui.cards.DeckManagerFragment
;
import
cn.garymb.ygomobile.ui.plus.DefWebViewClient
;
import
cn.garymb.ygomobile.utils.DeckUtil
;
import
static
junit
.
framework
.
Assert
.
assertEquals
;
import
cn.garymb.ygomobile.utils.JsonUtil
;
import
cn.garymb.ygomobile.utils.OkhttpUtil
;
import
okhttp3.Call
;
import
okhttp3.Callback
;
import
okhttp3.Response
;
public
class
MyCard
{
...
...
@@ -42,6 +48,51 @@ public class MyCard {
private
static
final
String
return_sso_url
=
"https://mycard.moe/mobile/?"
;
private
static
final
String
HOST_MC
=
"mycard.moe"
;
private
static
final
String
MC_MAIN_URL
=
"https://mycard.moe/mobile/ygopro/lobby"
;
public
static
final
String
DOWNLOAD_URL_EZ
=
"http://t.cn/EchWyLi"
;
public
static
final
String
MYCARD_NEWS_URL
=
"https://api.mycard.moe/apps.json"
;
public
static
final
String
MYCARD_POST_URL
=
"https://ygobbs.com/t/"
;
public
static
final
String
YGO_LFLIST_URL
=
"https://raw.githubusercontent.com/moecube/ygopro/server/lflist.conf"
;
public
static
final
String
ARG_TOPIC_LIST
=
"topic_list"
;
public
static
final
String
ARG_TOPICS
=
"topics"
;
public
static
final
String
ARG_ID
=
"id"
;
public
static
final
String
ARG_TITLE
=
"title"
;
public
static
final
String
ARG_IMAGE_URL
=
"image_url"
;
public
static
final
String
ARG_CREATE_TIME
=
"created_at"
;
public
static
final
String
ARG_OTHER
=
"other"
;
public
static
final
String
ARG_MC_NAME
=
"name"
;
public
static
final
String
ARG_MC_PASSWORD
=
"password"
;
public
static
final
String
ARG_YGOPRO
=
"ygopro"
;
public
static
final
String
ARG_ZH_CN
=
"zh-CN"
;
public
static
final
String
ARG_IMAGE
=
"image"
;
public
static
final
String
ARG_UPDATE_AT
=
"updated_at"
;
public
static
final
String
ARG_URL
=
"url"
;
public
static
final
String
ARG_NEWS
=
"news"
;
public
static
final
String
ARG_USERNAME
=
"username"
;
public
static
final
String
MYCARD_USER_DUEL_URL
=
"https://sapi.moecube.com:444/ygopro/arena/user"
;
public
static
final
String
ACTION_OPEN_MYCARD
=
"ygomobile.intent.action.MYCARD"
;
public
static
final
String
URL_MC_LOGIN
=
"https://accounts.moecube.com/"
;
public
static
final
String
ARG_SSO
=
"sso"
;
public
static
final
String
URL_MC_WATCH_DUEL_FUN
=
"wss://tiramisu.mycard.moe:7923/?filter=started"
;
public
static
final
String
URL_MC_WATCH_DUEL_MATCH
=
"wss://tiramisu.mycard.moe:8923/?filter=started"
;
public
static
final
String
URL_MC_MATCH
=
"https://api.mycard.moe/ygopro/match"
;
public
static
final
String
ARG_EVENT
=
"event"
;
public
static
final
String
ARG_DATA
=
"data"
;
public
static
final
String
HOST_MC_MATCH
=
"tiramisu.mycard.moe"
;
public
static
final
String
HOST_MC_OTHER
=
"tiramisu.mycard.moe"
;
public
static
final
int
PORT_MC_MATCH
=
8911
;
public
static
final
int
PORT_MC_OTHER
=
7911
;
public
static
final
String
ARG_LOCALE
=
"locale"
;
public
static
final
String
ARG_ARENA
=
"arena"
;
public
static
final
String
ARG_ATHLEIC
=
"athletic"
;
public
static
final
String
ARG_ENTERTAIN
=
"entertain"
;
public
static
final
String
ARG_ADDRESS
=
"address"
;
public
static
final
String
ARG_PORT
=
"port"
;
public
static
final
String
PACKAGE_NAME_EZ
=
"com.ourygo.ez"
;
private
static
final
Charset
UTF_8
=
Charset
.
forName
(
"UTF-8"
);
private
final
DefWebViewClient
mDefWebViewClient
;
private
final
User
mUser
=
new
User
();
...
...
@@ -82,6 +133,30 @@ public class MyCard {
};
}
//获取mc新闻列表
public
static
void
findMyCardNews
(
OnMyCardNewsQueryListener
onMyCardNewsQueryListener
)
{
OkhttpUtil
.
get
(
MYCARD_NEWS_URL
,
new
Callback
()
{
@Override
public
void
onFailure
(
Call
call
,
IOException
e
)
{
onMyCardNewsQueryListener
.
onMyCardNewsQuery
(
null
,
e
.
toString
());
}
@Override
public
void
onResponse
(
Call
call
,
Response
response
)
throws
IOException
{
String
json
=
response
.
body
().
string
();
try
{
onMyCardNewsQueryListener
.
onMyCardNewsQuery
(
JsonUtil
.
getMyCardNewsList
(
json
),
null
);
}
catch
(
JSONException
e
)
{
onMyCardNewsQueryListener
.
onMyCardNewsQuery
(
null
,
e
.
toString
());
}
}
});
}
public
interface
OnMyCardNewsQueryListener
{
void
onMyCardNewsQuery
(
List
<
McNews
>
mcNewsList
,
String
exception
);
}
private
static
String
byteArrayToHexString
(
byte
[]
array
)
{
StringBuilder
hexString
=
new
StringBuilder
();
for
(
byte
b
:
array
)
{
...
...
@@ -394,4 +469,21 @@ public class MyCard {
}
}
public
static
String
getMycardPostUrl
(
String
id
)
{
return
MYCARD_POST_URL
+
id
;
}
public
static
String
getImagePath
(
Context
context
)
{
// return context.getExternalFilesDir("image").getAbsolutePath();
return
new
File
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_PICTURES
).
getAbsolutePath
(),
"YGOMobile OY"
).
getAbsolutePath
();
}
public
static
String
getImageCachePath
()
{
return
App
.
get
().
getExternalFilesDir
(
"cache/image"
).
getAbsolutePath
();
}
public
static
String
getCachePath
()
{
return
App
.
get
().
getExternalFilesDir
(
"cache"
).
getAbsolutePath
();
}
}
mobile/src/main/java/cn/garymb/ygomobile/ui/mycard/mcchat/util/ImageUtil.java
View file @
467d7a14
package
cn.garymb.ygomobile.ui.mycard.mcchat.util
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.ColorMatrix
;
import
android.graphics.ColorMatrixColorFilter
;
import
android.graphics.drawable.Drawable
;
import
android.net.Uri
;
import
android.text.TextUtils
;
import
android.widget.ImageView
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
com.bumptech.glide.Glide
;
import
com.bumptech.glide.load.engine.DiskCacheStrategy
;
import
com.bumptech.glide.request.RequestOptions
;
import
com.bumptech.glide.request.target.CustomTarget
;
import
com.bumptech.glide.request.transition.Transition
;
import
com.bumptech.glide.signature.ObjectKey
;
import
com.ourygo.assistant.util.Util
;
import
cn.garymb.ygomobile.lite.R
;
import
cn.garymb.ygomobile.utils.PaletteUtil
;
import
cn.garymb.ygomobile.utils.glide.GlideCompat
;
public
class
ImageUtil
{
...
...
@@ -75,5 +83,24 @@ public class ImageUtil {
}
}
public
static
void
setImageAndBackground
(
Context
context
,
String
url
,
final
ImageView
im
)
{
if
(
url
!=
null
)
{
Glide
.
with
(
context
)
.
asBitmap
()
.
load
(
url
)
.
into
(
new
CustomTarget
<
Bitmap
>()
{
@Override
public
void
onResourceReady
(
@NonNull
Bitmap
resource
,
@Nullable
Transition
<?
super
Bitmap
>
transition
)
{
im
.
setImageBitmap
(
resource
);
PaletteUtil
.
setPaletteColor
(
resource
,
im
);
}
@Override
public
void
onLoadCleared
(
@Nullable
Drawable
placeholder
)
{
}
});
}
}
}
mobile/src/main/java/cn/garymb/ygomobile/utils/JsonUtil.java
0 → 100644
View file @
467d7a14
package
cn.garymb.ygomobile.utils
;
import
android.text.TextUtils
;
import
com.google.gson.Gson
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
java.util.ArrayList
;
import
java.util.List
;
import
cn.garymb.ygomobile.ui.mycard.McNews
;
import
cn.garymb.ygomobile.ui.mycard.MyCard
;
public
class
JsonUtil
{
//解析mc新闻列表
public
static
List
<
McNews
>
getMyCardNewsList
(
String
json
)
throws
JSONException
{
JSONArray
jsonArray
=
new
JSONArray
(
json
);
JSONObject
newsJson
=
null
;
List
<
McNews
>
mcNewsList
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
jsonArray
.
length
();
i
++)
{
String
id
=
jsonArray
.
getJSONObject
(
i
).
getString
(
MyCard
.
ARG_ID
);
if
(!
TextUtils
.
isEmpty
(
id
)
&&
id
.
equals
(
MyCard
.
ARG_YGOPRO
))
{
newsJson
=
jsonArray
.
getJSONObject
(
i
);
}
}
if
(
newsJson
==
null
)
return
mcNewsList
;
JSONArray
newsArray
=
newsJson
.
getJSONObject
(
MyCard
.
ARG_NEWS
).
getJSONArray
(
MyCard
.
ARG_ZH_CN
);
for
(
int
i
=
0
;
i
<
newsArray
.
length
();
i
++)
{
JSONObject
jsonObject1
=
newsArray
.
getJSONObject
(
i
);
McNews
mcNews
=
new
McNews
();
mcNews
.
setNews_url
(
jsonObject1
.
getString
(
MyCard
.
ARG_URL
));
mcNews
.
setImage_url
(
jsonObject1
.
getString
(
MyCard
.
ARG_IMAGE
));
mcNews
.
setTitle
(
jsonObject1
.
getString
(
MyCard
.
ARG_TITLE
));
mcNews
.
setCreate_time
(
jsonObject1
.
getString
(
MyCard
.
ARG_UPDATE_AT
));
mcNewsList
.
add
(
mcNews
);
}
return
mcNewsList
;
}
/*
public static McDuelInfo getUserDuelInfo(String json) {
return new Gson().fromJson(json, McDuelInfo.class);
}
public static String getDuelRoomEvent(String json) throws JSONException {
return new JSONObject(json).getString(MyCard.ARG_EVENT);
}
public static List<DuelRoom> getDuelRoomList(String json) throws JSONException {
JSONObject jsonObject = new JSONObject(json);
List<DuelRoom> duelRoomList = new ArrayList<>();
switch (getDuelRoomEvent(json)){
case DuelRoom.EVENT_INIT:
case DuelRoom.EVENT_CREATE:
JSONArray jsonArray=jsonObject.getJSONArray(MyCard.ARG_DATA);
for (int i = 0; i < jsonArray.length(); i++) {
DuelRoom duelRoom=new Gson().fromJson(jsonArray.getJSONObject(i).toString(), DuelRoom.class);
duelRoom.setArena(duelRoom.getArena());
duelRoom.setArenaType(duelRoom.getArena(),duelRoom.getId(),duelRoom.getOptions());
duelRoomList.add(duelRoom);
}
break;
case DuelRoom.EVENT_DELETE:
DuelRoom duelRoom=new DuelRoom();
duelRoom.setId(jsonObject.getString(MyCard.ARG_DATA));
duelRoom.setTitle(jsonObject.getString(MyCard.ARG_DATA));
duelRoomList.add(duelRoom);
break;
}
return duelRoomList;
}
public static YGOServer getMatchYGOServer(String body) throws JSONException {
JSONObject jsonObject=new JSONObject(body);
YGOServer ygoServer=new YGOServer();
ygoServer.setServerAddr(jsonObject.getString(MyCard.ARG_ADDRESS));
ygoServer.setPort(jsonObject.getInt(MyCard.ARG_PORT));
ygoServer.setPassword(jsonObject.getString(MyCard.ARG_MC_PASSWORD));
return ygoServer;
}*/
}
mobile/src/main/java/cn/garymb/ygomobile/utils/OkhttpUtil.java
0 → 100644
View file @
467d7a14
This diff is collapsed.
Click to expand it.
mobile/src/main/java/cn/garymb/ygomobile/utils/PaletteUtil.java
0 → 100644
View file @
467d7a14
package
cn.garymb.ygomobile.utils
;
import
android.graphics.Bitmap
;
import
android.view.View
;
import
androidx.annotation.NonNull
;
import
androidx.palette.graphics.Palette
;
/**
* Create By feihua On 2021/10/24
*/
public
class
PaletteUtil
{
/**
* 设置图片主色调
*
* @param bitmap
* @return
*/
public
static
void
setPaletteColor
(
Bitmap
bitmap
,
final
View
view
)
{
if
(
bitmap
==
null
)
{
return
;
}
Palette
.
from
(
bitmap
).
maximumColorCount
(
10
).
generate
(
new
Palette
.
PaletteAsyncListener
()
{
@Override
public
void
onGenerated
(
@NonNull
Palette
palette
)
{
// List<Palette.Swatch> list = palette.getSwatches();
// int colorSize = 0;
// Palette.Swatch maxSwatch = null;
// for (int i = 0; i < list.size(); i++) {
// Palette.Swatch swatch = list.get(i);
// if (swatch != null) {
// int population = swatch.getPopulation();
// if (colorSize < population) {
// colorSize = population;
// maxSwatch = swatch;
// }
// }
// }
Palette
.
Swatch
s
=
palette
.
getDominantSwatch
();
//独特的一种
Palette
.
Swatch
s1
=
palette
.
getVibrantSwatch
();
//获取到充满活力的这种色调
Palette
.
Swatch
s2
=
palette
.
getDarkVibrantSwatch
();
//获取充满活力的黑
Palette
.
Swatch
s3
=
palette
.
getLightVibrantSwatch
();
//获取充满活力的亮
Palette
.
Swatch
s4
=
palette
.
getMutedSwatch
();
//获取柔和的色调
Palette
.
Swatch
s5
=
palette
.
getDarkMutedSwatch
();
//获取柔和的黑
Palette
.
Swatch
s6
=
palette
.
getLightMutedSwatch
();
//获取柔和的亮
Palette
.
Swatch
ss
=
s1
;
if
(
ss
==
null
)
ss
=
s
;
if
(
ss
==
null
)
ss
=
s2
;
if
(
ss
==
null
)
ss
=
s3
;
if
(
ss
==
null
)
ss
=
s4
;
if
(
ss
==
null
)
ss
=
s5
;
if
(
ss
==
null
)
ss
=
s6
;
if
(
ss
!=
null
)
{
view
.
setBackgroundColor
(
ss
.
getRgb
());
}
}
});
}
}
mobile/src/main/res/drawable-xhdpi/mycard.png
View replaced file @
e8db0845
View file @
467d7a14
9.72 KB
|
W:
|
H:
30.3 KB
|
W:
|
H:
2-up
Swipe
Onion skin
mobile/src/main/res/layout/item_banner_main.xml
0 → 100644
View file @
467d7a14
<?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"
>
<androidx.appcompat.widget.AppCompatImageView
android:id=
"@+id/iv_image"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:scaleType=
"fitEnd"
/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/transparent"
android:scaleType=
"centerCrop"
/>
<RelativeLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginLeft=
"10dp"
>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/tv_type"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_above=
"@id/tv_time"
android:layout_marginBottom=
"4dp"
android:background=
"@color/transparent"
android:padding=
"2dp"
android:textColor=
"@color/black"
android:textSize=
"15sp"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/tv_time"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_above=
"@id/ll_title"
android:layout_marginBottom=
"5dp"
android:textColor=
"@color/white"
android:textSize=
"8sp"
/>
<LinearLayout
android:id=
"@+id/ll_title"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_alignParentBottom=
"true"
android:layout_marginBottom=
"13dp"
android:orientation=
"horizontal"
>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/tv_title"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:ellipsize=
"end"
android:gravity=
"bottom"
android:maxLines=
"2"
android:textColor=
"@color/white"
android:textSize=
"12sp"
android:textStyle=
"bold"
/>
<LinearLayout
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment