Backup before switching to androidx
This commit is contained in:
parent
fb764591be
commit
5235a6b3a4
Binary file not shown.
|
@ -1,29 +0,0 @@
|
||||||
<component name="ProjectCodeStyleConfiguration">
|
|
||||||
<code_scheme name="Project" version="173">
|
|
||||||
<Objective-C-extensions>
|
|
||||||
<file>
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
|
|
||||||
</file>
|
|
||||||
<class>
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
|
|
||||||
</class>
|
|
||||||
<extensions>
|
|
||||||
<pair source="cpp" header="h" fileNamingConvention="NONE" />
|
|
||||||
<pair source="c" header="h" fileNamingConvention="NONE" />
|
|
||||||
</extensions>
|
|
||||||
</Objective-C-extensions>
|
|
||||||
</code_scheme>
|
|
||||||
</component>
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
|
||||||
|
</project>
|
|
@ -1,11 +1,12 @@
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
|
apply plugin: 'kotlin-android-extensions'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 27
|
compileSdkVersion 28
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 27
|
targetSdkVersion 28
|
||||||
versionCode 1
|
versionCode 1
|
||||||
versionName "1.0.9"
|
versionName "1.0.9"
|
||||||
|
|
||||||
|
@ -22,16 +23,15 @@ android {
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
}
|
}
|
||||||
productFlavors {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.android.support:appcompat-v7:27.1.1'
|
implementation 'com.android.support:appcompat-v7:28.0.0'
|
||||||
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
||||||
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
|
||||||
implementation "org.jetbrains.anko:anko:$anko_version"
|
implementation "org.jetbrains.anko:anko:$anko_version"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,8 +111,8 @@ class APNGDisassembler {
|
||||||
throw BadApng("`y_offset` + `height` must be <= `IHDR` height")
|
throw BadApng("`y_offset` + `height` must be <= `IHDR` height")
|
||||||
}
|
}
|
||||||
|
|
||||||
png!!.addAll(pngSignature.toList())
|
png?.addAll(pngSignature.toList())
|
||||||
png!!.addAll(generateIhdr(ihdr, width, height).toList())
|
png?.addAll(generateIhdr(ihdr, width, height).toList())
|
||||||
plte?.let {
|
plte?.let {
|
||||||
png!!.addAll(it.toList())
|
png!!.addAll(it.toList())
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,8 +147,8 @@ class Apng {
|
||||||
res.addAll(generateACTL())
|
res.addAll(generateACTL())
|
||||||
|
|
||||||
// Get max height and max width
|
// Get max height and max width
|
||||||
val maxHeight = frames.sortedByDescending { it.height }[0].height
|
maxHeight = frames.sortedByDescending { it.height }[0].height
|
||||||
val maxWitdh = frames.sortedByDescending { it.width }[0].width
|
maxWidth = frames.sortedByDescending { it.width }[0].width
|
||||||
|
|
||||||
if (cover == null) {
|
if (cover == null) {
|
||||||
val framesByte = ArrayList<Byte>()
|
val framesByte = ArrayList<Byte>()
|
||||||
|
@ -171,24 +171,8 @@ class Apng {
|
||||||
fcTL.addAll(to4Bytes(frames[0].width).toList())
|
fcTL.addAll(to4Bytes(frames[0].width).toList())
|
||||||
fcTL.addAll(to4Bytes(frames[0].height).toList())
|
fcTL.addAll(to4Bytes(frames[0].height).toList())
|
||||||
|
|
||||||
// Calculate offset
|
fcTL.addAll(to4Bytes(frames[0].x_offsets).toList())
|
||||||
if (frames[0].x_offsets == null) {
|
fcTL.addAll(to4Bytes(frames[0].y_offsets).toList())
|
||||||
if (frames[0].width < maxWitdh) {
|
|
||||||
val xOffset = (maxWitdh / 2) - (frames[0].width / 2)
|
|
||||||
fcTL.addAll(to4Bytes(xOffset).toList())
|
|
||||||
} else {
|
|
||||||
fcTL.addAll(to4Bytes(0).toList())
|
|
||||||
}
|
|
||||||
if (frames[0].height < maxHeight) {
|
|
||||||
val xOffset = (maxHeight / 2) - (frames[0].height / 2)
|
|
||||||
fcTL.addAll(to4Bytes(xOffset).toList())
|
|
||||||
} else {
|
|
||||||
fcTL.addAll(to4Bytes(0).toList())
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fcTL.addAll(to4Bytes(frames[0].x_offsets).toList())
|
|
||||||
fcTL.addAll(to4Bytes(frames[0].y_offsets).toList())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set frame delay
|
// Set frame delay
|
||||||
fcTL.addAll(to2Bytes(frames[0].delay.toInt()).toList())
|
fcTL.addAll(to2Bytes(frames[0].delay.toInt()).toList())
|
||||||
|
@ -255,24 +239,9 @@ class Apng {
|
||||||
fcTL.addAll(to4Bytes(frames[0].width).toList())
|
fcTL.addAll(to4Bytes(frames[0].width).toList())
|
||||||
fcTL.addAll(to4Bytes(frames[0].height).toList())
|
fcTL.addAll(to4Bytes(frames[0].height).toList())
|
||||||
|
|
||||||
// Calculate offset
|
|
||||||
if (frames[0].x_offsets == null) {
|
fcTL.addAll(to4Bytes(frames[0].x_offsets).toList())
|
||||||
if (frames[0].width < maxWitdh) {
|
fcTL.addAll(to4Bytes(frames[0].y_offsets).toList())
|
||||||
val xOffset = (maxWitdh / 2) - (frames[0].width / 2)
|
|
||||||
fcTL.addAll(to4Bytes(xOffset).toList())
|
|
||||||
} else {
|
|
||||||
fcTL.addAll(to4Bytes(0).toList())
|
|
||||||
}
|
|
||||||
if (frames[0].height < maxHeight) {
|
|
||||||
val xOffset = (maxHeight / 2) - (frames[0].height / 2)
|
|
||||||
fcTL.addAll(to4Bytes(xOffset).toList())
|
|
||||||
} else {
|
|
||||||
fcTL.addAll(to4Bytes(0).toList())
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fcTL.addAll(to4Bytes(frames[0].x_offsets!!).toList())
|
|
||||||
fcTL.addAll(to4Bytes(frames[0].y_offsets!!).toList())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set frame delay
|
// Set frame delay
|
||||||
fcTL.addAll(to2Bytes(frames[0].delay.toInt()).toList())
|
fcTL.addAll(to2Bytes(frames[0].delay.toInt()).toList())
|
||||||
|
@ -326,23 +295,8 @@ class Apng {
|
||||||
fcTL.addAll(to4Bytes(frames[i].width).toList())
|
fcTL.addAll(to4Bytes(frames[i].width).toList())
|
||||||
fcTL.addAll(to4Bytes(frames[i].height).toList())
|
fcTL.addAll(to4Bytes(frames[i].height).toList())
|
||||||
|
|
||||||
if (frames[i].x_offsets == null) {
|
fcTL.addAll(to4Bytes(frames[i].x_offsets).toList())
|
||||||
if (frames[i].width < maxWitdh) {
|
fcTL.addAll(to4Bytes(frames[i].y_offsets).toList())
|
||||||
val xOffset = (maxWitdh / 2) - (frames[i].width / 2)
|
|
||||||
fcTL.addAll(to4Bytes(xOffset).toList())
|
|
||||||
} else {
|
|
||||||
fcTL.addAll(to4Bytes(0).toList())
|
|
||||||
}
|
|
||||||
if (frames[i].height < maxHeight) {
|
|
||||||
val xOffset = (maxHeight / 2) - (frames[i].height / 2)
|
|
||||||
fcTL.addAll(to4Bytes(xOffset).toList())
|
|
||||||
} else {
|
|
||||||
fcTL.addAll(to4Bytes(0).toList())
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fcTL.addAll(to4Bytes(frames[i].x_offsets!!).toList())
|
|
||||||
fcTL.addAll(to4Bytes(frames[i].y_offsets!!).toList())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set frame delay
|
// Set frame delay
|
||||||
fcTL.addAll(to2Bytes(frames[i].delay.toInt()).toList())
|
fcTL.addAll(to2Bytes(frames[i].delay.toInt()).toList())
|
||||||
|
@ -504,9 +458,9 @@ class Apng {
|
||||||
val pnn = PnnQuantizer(btm)
|
val pnn = PnnQuantizer(btm)
|
||||||
val btmOptimised = pnn.convert(maxColor, false)
|
val btmOptimised = pnn.convert(maxColor, false)
|
||||||
if (sizePercent != null) {
|
if (sizePercent != null) {
|
||||||
apng.addFrames(btmOptimised, it.delay, ((it.x_offsets ?: 0).toFloat() * sizePercent.toFloat() / 100f).toInt(), ((it.y_offsets ?: 0).toFloat() * sizePercent.toFloat() / 100f).toInt(), it.dispose_op, it.blend_op)
|
apng.addFrames(btmOptimised, it.delay, (it.x_offsets.toFloat() * sizePercent.toFloat() / 100f).toInt(), (it.y_offsets.toFloat() * sizePercent.toFloat() / 100f).toInt(), it.dispose_op, it.blend_op)
|
||||||
} else {
|
} else {
|
||||||
apng.addFrames(btmOptimised, it.delay, it.x_offsets ?: 0, it.y_offsets ?: 0, it.dispose_op, it.blend_op)
|
apng.addFrames(btmOptimised, it.delay, it.x_offsets, it.y_offsets, it.dispose_op, it.blend_op)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
frames = apng.frames
|
frames = apng.frames
|
||||||
|
@ -520,6 +474,7 @@ class Apng {
|
||||||
it.maxHeight = maxHeight
|
it.maxHeight = maxHeight
|
||||||
}
|
}
|
||||||
val drawedFrame = ApngAnimator(null).draw(frames)
|
val drawedFrame = ApngAnimator(null).draw(frames)
|
||||||
|
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "frame0.png").writeBytes(PngEncoder.encode(drawedFrame[0]))
|
||||||
for (i in 1 until frames.size) {
|
for (i in 1 until frames.size) {
|
||||||
val diffCalculator = BitmapDiffCalculator(drawedFrame[i - 1], drawedFrame[i])
|
val diffCalculator = BitmapDiffCalculator(drawedFrame[i - 1], drawedFrame[i])
|
||||||
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "frame$i.png").writeBytes(PngEncoder.encode(diffCalculator.res, true))
|
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "frame$i.png").writeBytes(PngEncoder.encode(diffCalculator.res, true))
|
||||||
|
|
|
@ -5,11 +5,11 @@ apply plugin: 'kotlin-android'
|
||||||
apply plugin: 'kotlin-android-extensions'
|
apply plugin: 'kotlin-android-extensions'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 27
|
compileSdkVersion 28
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "oupson.apngcreator"
|
applicationId "oupson.apngcreator"
|
||||||
minSdkVersion 24
|
minSdkVersion 24
|
||||||
targetSdkVersion 26
|
targetSdkVersion 28
|
||||||
versionCode 1
|
versionCode 1
|
||||||
versionName "1.0"
|
versionName "1.0"
|
||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
|
@ -48,6 +48,7 @@ dependencies {
|
||||||
implementation 'com.android.support:design:27.1.1' // where X.X.X version
|
implementation 'com.android.support:design:27.1.1' // where X.X.X version
|
||||||
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
|
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
|
||||||
implementation "org.jetbrains.anko:anko-design:$anko_version"
|
implementation "org.jetbrains.anko:anko-design:$anko_version"
|
||||||
|
implementation "org.jetbrains.anko:anko-constraint-layout:$anko_version"
|
||||||
}
|
}
|
||||||
kotlin {
|
kotlin {
|
||||||
experimental {
|
experimental {
|
||||||
|
|
|
@ -2,12 +2,10 @@ package oupson.apngcreator
|
||||||
|
|
||||||
import android.support.test.InstrumentationRegistry
|
import android.support.test.InstrumentationRegistry
|
||||||
import android.support.test.runner.AndroidJUnit4
|
import android.support.test.runner.AndroidJUnit4
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
import org.junit.Assert.*
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instrumented test, which will execute on an Android device.
|
* Instrumented test, which will execute on an Android device.
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,14 +2,19 @@ package oupson.apngcreator
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.res.ColorStateList
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
|
import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.support.design.widget.FloatingActionButton
|
import android.support.design.widget.FloatingActionButton
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
|
import android.text.Html
|
||||||
|
import android.view.View
|
||||||
import android.widget.ListView
|
import android.widget.ListView
|
||||||
import org.jetbrains.anko.*
|
import org.jetbrains.anko.*
|
||||||
|
import org.jetbrains.anko.design.appBarLayout
|
||||||
import org.jetbrains.anko.design.floatingActionButton
|
import org.jetbrains.anko.design.floatingActionButton
|
||||||
import org.jetbrains.anko.sdk27.coroutines.onClick
|
import org.jetbrains.anko.sdk27.coroutines.onClick
|
||||||
import oupson.apng.Apng
|
import oupson.apng.Apng
|
||||||
|
@ -22,6 +27,7 @@ class CreatorActivity : AppCompatActivity() {
|
||||||
var bitmapAdapter : AnkoAdapter<Bitmap>? = null
|
var bitmapAdapter : AnkoAdapter<Bitmap>? = null
|
||||||
val PICK_IMAGE = 999
|
val PICK_IMAGE = 999
|
||||||
var view = CreatorActivityLayout()
|
var view = CreatorActivityLayout()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
view.setContentView(this)
|
view.setContentView(this)
|
||||||
|
@ -38,7 +44,7 @@ class CreatorActivity : AppCompatActivity() {
|
||||||
startActivityForResult(chooserIntent, PICK_IMAGE)
|
startActivityForResult(chooserIntent, PICK_IMAGE)
|
||||||
}
|
}
|
||||||
view.createButton.onClick {
|
view.createButton.onClick {
|
||||||
var apngCreated = Apng()
|
val apngCreated = Apng()
|
||||||
|
|
||||||
items.forEach { bitmap ->
|
items.forEach { bitmap ->
|
||||||
apngCreated.addFrames(bitmap)
|
apngCreated.addFrames(bitmap)
|
||||||
|
@ -54,23 +60,16 @@ class CreatorActivity : AppCompatActivity() {
|
||||||
a.load(apngCreated.toByteArray())
|
a.load(apngCreated.toByteArray())
|
||||||
a.onLoaded { anim ->
|
a.onLoaded { anim ->
|
||||||
alert {
|
alert {
|
||||||
customView {
|
customView {
|
||||||
imageView {
|
ctx.setTheme(R.style.AppTheme_DarkDialog)
|
||||||
/**anim.anim?.let {cu ->
|
imageView {
|
||||||
for (i in 0 until cu.numberOfFrames) {
|
this.setImageDrawable(anim.anim)
|
||||||
val vt = Bitmap.createBitmap(cu.getFrame(i).intrinsicWidth, cu.getFrame(i).intrinsicHeight, Bitmap.Config.ARGB_8888)
|
|
||||||
val canvas = Canvas(vt)
|
|
||||||
cu.getFrame(i).draw(canvas)
|
|
||||||
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "frameCreated$i.png").writeBytes(PngEncoder.encode(vt))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
this.setImageDrawable(anim.anim)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}.show()
|
|
||||||
}
|
}
|
||||||
|
}.show()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
bitmapAdapter = AnkoAdapter({items}) {index, items, view ->
|
bitmapAdapter = AnkoAdapter({items}) {index, items, view ->
|
||||||
with(items[index]) {
|
with(items[index]) {
|
||||||
verticalLayout {
|
verticalLayout {
|
||||||
|
@ -112,13 +111,39 @@ class CreatorActivityLayout : AnkoComponent<CreatorActivity> {
|
||||||
|
|
||||||
override fun createView(ui: AnkoContext<CreatorActivity>) = with(ui) {
|
override fun createView(ui: AnkoContext<CreatorActivity>) = with(ui) {
|
||||||
relativeLayout {
|
relativeLayout {
|
||||||
|
backgroundColor = Color.BLACK
|
||||||
|
var bar = verticalLayout {
|
||||||
|
id = View.generateViewId()
|
||||||
|
backgroundColor = Color.DKGRAY
|
||||||
|
appBarLayout {
|
||||||
|
backgroundColor = Color.BLACK
|
||||||
|
toolbar {
|
||||||
|
id = View.generateViewId()
|
||||||
|
title = Html.fromHtml("<font color='#ffffff'>Create APNG</font>")
|
||||||
|
}.lparams {
|
||||||
|
width = matchParent
|
||||||
|
height = wrapContent
|
||||||
|
}
|
||||||
|
}.lparams {
|
||||||
|
width = matchParent
|
||||||
|
height = wrapContent
|
||||||
|
bottomMargin = 1
|
||||||
|
}
|
||||||
|
}.lparams {
|
||||||
|
width = matchParent
|
||||||
|
height = wrapContent
|
||||||
|
}
|
||||||
|
|
||||||
listView = listView {
|
listView = listView {
|
||||||
|
id = View.generateViewId()
|
||||||
}.lparams {
|
}.lparams {
|
||||||
width = matchParent
|
width = matchParent
|
||||||
height = matchParent
|
height = matchParent
|
||||||
|
below(bar)
|
||||||
}
|
}
|
||||||
addFrameButton = floatingActionButton {
|
addFrameButton = floatingActionButton {
|
||||||
imageResource = R.drawable.ic_add_white_24dp
|
imageResource = R.drawable.ic_add_black_24dp
|
||||||
|
backgroundTintList = ColorStateList.valueOf(Color.WHITE)
|
||||||
isClickable = true
|
isClickable = true
|
||||||
}.lparams {
|
}.lparams {
|
||||||
width = wrapContent
|
width = wrapContent
|
||||||
|
@ -128,7 +153,8 @@ class CreatorActivityLayout : AnkoComponent<CreatorActivity> {
|
||||||
alignParentEnd()
|
alignParentEnd()
|
||||||
}
|
}
|
||||||
createButton = floatingActionButton {
|
createButton = floatingActionButton {
|
||||||
imageResource = R.drawable.ic_play_arrow_white_24dp
|
imageResource = R.drawable.ic_play_arrow_black_24dp
|
||||||
|
backgroundTintList = ColorStateList.valueOf(Color.WHITE)
|
||||||
isClickable = true
|
isClickable = true
|
||||||
}.lparams {
|
}.lparams {
|
||||||
width = wrapContent
|
width = wrapContent
|
||||||
|
|
|
@ -2,21 +2,35 @@ package oupson.apngcreator
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v4.app.ActivityCompat
|
import android.support.v4.app.ActivityCompat
|
||||||
import android.support.v4.content.ContextCompat
|
import android.support.v4.content.ContextCompat
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import kotlinx.android.synthetic.main.activity_main2.*
|
import android.widget.ImageView
|
||||||
|
import org.jetbrains.anko.backgroundColor
|
||||||
|
import org.jetbrains.anko.imageView
|
||||||
|
import org.jetbrains.anko.matchParent
|
||||||
import org.jetbrains.anko.sdk27.coroutines.onClick
|
import org.jetbrains.anko.sdk27.coroutines.onClick
|
||||||
|
import org.jetbrains.anko.verticalLayout
|
||||||
import oupson.apng.ApngAnimator
|
import oupson.apng.ApngAnimator
|
||||||
|
|
||||||
|
|
||||||
class Main2Activity : AppCompatActivity() {
|
class Main2Activity : AppCompatActivity() {
|
||||||
|
lateinit var imageView : ImageView
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main2)
|
|
||||||
|
verticalLayout {
|
||||||
|
imageView = imageView {
|
||||||
|
|
||||||
|
}.lparams {
|
||||||
|
width = matchParent
|
||||||
|
height = matchParent
|
||||||
|
}
|
||||||
|
backgroundColor = Color.parseColor("#323232")
|
||||||
|
}
|
||||||
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||||
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||||
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
|
@ -38,10 +52,10 @@ class Main2Activity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun load() {
|
fun load() {
|
||||||
val animator = ApngAnimator(applicationContext).loadInto(imageView3)
|
val animator = ApngAnimator(applicationContext).loadInto(imageView)
|
||||||
val uri = intent.data
|
val uri = intent.data
|
||||||
animator.load(uri, null)
|
animator.load(uri, null)
|
||||||
imageView3.onClick {
|
imageView.onClick {
|
||||||
try {
|
try {
|
||||||
if (animator.isPlaying) {
|
if (animator.isPlaying) {
|
||||||
animator.pause()
|
animator.pause()
|
||||||
|
|
|
@ -1,75 +1,181 @@
|
||||||
package oupson.apngcreator
|
package oupson.apngcreator
|
||||||
|
|
||||||
import android.content.Intent
|
import android.graphics.Color
|
||||||
|
import android.graphics.drawable.GradientDrawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.support.constraint.ConstraintLayout
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
|
import android.text.Html
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.Menu
|
import android.view.View
|
||||||
import android.view.MenuItem
|
import android.widget.Toolbar
|
||||||
import android.widget.SeekBar
|
|
||||||
import com.squareup.picasso.Picasso
|
import com.squareup.picasso.Picasso
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import org.jetbrains.anko.*
|
||||||
|
import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder
|
||||||
|
import org.jetbrains.anko.constraint.layout.applyConstraintSet
|
||||||
|
import org.jetbrains.anko.constraint.layout.constraintLayout
|
||||||
|
import org.jetbrains.anko.constraint.layout.matchConstraint
|
||||||
|
import org.jetbrains.anko.design.appBarLayout
|
||||||
|
import org.jetbrains.anko.sdk27.coroutines.onClick
|
||||||
|
import org.jetbrains.anko.sdk27.coroutines.onMenuItemClick
|
||||||
|
import org.jetbrains.anko.sdk27.coroutines.onSeekBarChangeListener
|
||||||
import oupson.apng.ApngAnimator
|
import oupson.apng.ApngAnimator
|
||||||
|
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
lateinit var animator: ApngAnimator
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
lateinit var animator: ApngAnimator
|
||||||
|
lateinit var tool : Toolbar
|
||||||
// val imageUrl = "http://oupson.oupsman.fr/apng/bigApng.png"
|
// val imageUrl = "http://oupson.oupsman.fr/apng/bigApng.png"
|
||||||
// val imageUrl = "https://metagif.files.wordpress.com/2015/01/bugbuckbunny.png"
|
// val imageUrl = "https://metagif.files.wordpress.com/2015/01/bugbuckbunny.png"
|
||||||
val imageUrl = "http://orig06.deviantart.net/7812/f/2012/233/7/5/twilight_rapidash_shaded_and_animated_by_tamalesyatole-d5bz7hd.png"
|
val imageUrl = "http://orig06.deviantart.net/7812/f/2012/233/7/5/twilight_rapidash_shaded_and_animated_by_tamalesyatole-d5bz7hd.png"
|
||||||
// val imageUrl = "https://raw.githubusercontent.com/tinify/iMessage-Panda-sticker/master/StickerPackExtension/Stickers.xcstickers/Sticker%20Pack.stickerpack/panda.sticker/panda.png"
|
// val imageUrl = "https://raw.githubusercontent.com/tinify/iMessage-Panda-sticker/master/StickerPackExtension/Stickers.xcstickers/Sticker%20Pack.stickerpack/panda.sticker/panda.png"
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
val buttonDrawable = GradientDrawable().apply {
|
||||||
animator = ApngAnimator(this).loadInto(imageView).apply {
|
shape = GradientDrawable.RECTANGLE
|
||||||
load(imageUrl)
|
cornerRadius = dip(5).toFloat()
|
||||||
onLoaded {
|
setStroke(2, Color.WHITE)
|
||||||
setOnAnimationLoopListener {
|
}
|
||||||
// Log.e("app-test", "onLoop")
|
verticalLayout {
|
||||||
|
backgroundColor = Color.BLACK
|
||||||
|
verticalLayout {
|
||||||
|
backgroundColor = Color.DKGRAY
|
||||||
|
appBarLayout {
|
||||||
|
backgroundColor = Color.BLACK
|
||||||
|
tool = toolbar {
|
||||||
|
id = View.generateViewId()
|
||||||
|
title = Html.fromHtml("<font color='#ffffff'>MainActivity</font>")
|
||||||
|
inflateMenu(R.menu.main_menu)
|
||||||
|
onMenuItemClick { item ->
|
||||||
|
Log.e("lll", "Click")
|
||||||
|
when (item!!.itemId) {
|
||||||
|
R.id.action_open_create_activity -> {
|
||||||
|
Log.e("lll", "Click")
|
||||||
|
startActivity<CreatorActivity>()
|
||||||
|
finish()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.lparams {
|
||||||
|
width = matchParent
|
||||||
|
height = wrapContent
|
||||||
|
}
|
||||||
|
}.lparams {
|
||||||
|
width = matchParent
|
||||||
|
height = wrapContent
|
||||||
|
bottomMargin = 1
|
||||||
}
|
}
|
||||||
|
}.lparams {
|
||||||
|
width = matchParent
|
||||||
|
height = wrapContent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
constraintLayout {
|
||||||
|
val pauseButton = button("pause") {
|
||||||
|
id = View.generateViewId()
|
||||||
|
background = buttonDrawable
|
||||||
|
onClick {
|
||||||
|
animator.pause()
|
||||||
|
}
|
||||||
|
}.lparams(
|
||||||
|
width = wrapContent,
|
||||||
|
height = wrapContent
|
||||||
|
)
|
||||||
|
val playButton = button("play") {
|
||||||
|
background = buttonDrawable
|
||||||
|
id = View.generateViewId()
|
||||||
|
onClick {
|
||||||
|
animator.play()
|
||||||
|
}
|
||||||
|
}.lparams(
|
||||||
|
width = wrapContent,
|
||||||
|
height = wrapContent
|
||||||
|
)
|
||||||
|
val seekBar = themedSeekBar(R.style.AppTheme_SeekBar){
|
||||||
|
id = View.generateViewId()
|
||||||
|
max = 200
|
||||||
|
progress = 10
|
||||||
|
onSeekBarChangeListener {
|
||||||
|
onProgressChanged { seekBar, progressValue, fromUser -> }
|
||||||
|
onStartTrackingTouch { seekBar -> }
|
||||||
|
onStopTrackingTouch { seekBar ->
|
||||||
|
Log.e("TAG", (seekBar!!.progress.toFloat() / 100f).toString())
|
||||||
|
animator.speed = (seekBar!!.progress.toFloat() / 100f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.lparams(
|
||||||
|
width = matchConstraint,
|
||||||
|
height = wrapContent
|
||||||
|
)
|
||||||
|
val imageView2 = imageView {
|
||||||
|
id = View.generateViewId()
|
||||||
|
Picasso.get().load(imageUrl).into(this)
|
||||||
|
}.lparams(
|
||||||
|
width = matchConstraint,
|
||||||
|
height = matchConstraint
|
||||||
|
)
|
||||||
|
val imageView = imageView {
|
||||||
|
id = View.generateViewId()
|
||||||
|
animator = ApngAnimator(this@MainActivity).loadInto(this).apply {
|
||||||
|
load(imageUrl)
|
||||||
|
onLoaded {
|
||||||
|
setOnAnimationLoopListener {
|
||||||
|
// Log.e("app-test", "onLoop")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.lparams(
|
||||||
|
width = matchConstraint,
|
||||||
|
height = matchConstraint
|
||||||
|
)
|
||||||
|
applyConstraintSet {
|
||||||
|
pauseButton {
|
||||||
|
connect(
|
||||||
|
ConstraintSetBuilder.Side.BOTTOM to ConstraintSetBuilder.Side.TOP of seekBar margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.END to ConstraintSetBuilder.Side.END of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
playButton {
|
||||||
|
connect(
|
||||||
|
ConstraintSetBuilder.Side.BOTTOM to ConstraintSetBuilder.Side.TOP of seekBar margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.START to ConstraintSetBuilder.Side.START of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
seekBar {
|
||||||
|
connect(
|
||||||
|
ConstraintSetBuilder.Side.BOTTOM to ConstraintSetBuilder.Side.BOTTOM of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.END to ConstraintSetBuilder.Side.END of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.START to ConstraintSetBuilder.Side.START of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
imageView2 {
|
||||||
|
connect(
|
||||||
|
ConstraintSetBuilder.Side.BOTTOM to ConstraintSetBuilder.Side.TOP of playButton margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.END to ConstraintSetBuilder.Side.END of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.START to ConstraintSetBuilder.Side.START of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.TOP to ConstraintSetBuilder.Side.BOTTOM of imageView
|
||||||
|
)
|
||||||
|
}
|
||||||
|
imageView {
|
||||||
|
connect(
|
||||||
|
ConstraintSetBuilder.Side.BOTTOM to ConstraintSetBuilder.Side.TOP of imageView2 margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.END to ConstraintSetBuilder.Side.END of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.START to ConstraintSetBuilder.Side.START of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8),
|
||||||
|
ConstraintSetBuilder.Side.TOP to ConstraintSetBuilder.Side.TOP of ConstraintLayout.LayoutParams.PARENT_ID margin dip(8)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.lparams {
|
||||||
|
width = matchParent
|
||||||
|
height = matchParent
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
|
|
||||||
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progressValue: Int, fromUser: Boolean) {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStartTrackingTouch(seekBar: SeekBar) {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
|
||||||
Log.e("TAG" , (seekBar.progress.toFloat() / 100f).toString())
|
|
||||||
animator.speed = (seekBar.progress.toFloat() / 100f)
|
|
||||||
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
Picasso.get().load(imageUrl).into(imageView2)
|
|
||||||
|
|
||||||
play.setOnClickListener {
|
|
||||||
animator.play()
|
|
||||||
}
|
|
||||||
|
|
||||||
pause.setOnClickListener {
|
|
||||||
animator.pause()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
|
|
||||||
menuInflater.inflate(R.menu.main_menu, menu)
|
|
||||||
return super.onCreateOptionsMenu(menu)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
|
||||||
when(item?.itemId) {
|
|
||||||
R.id.action_open_create_activity -> {
|
|
||||||
val intent = Intent(this, CreatorActivity::class.java)
|
|
||||||
startActivity(intent)
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.onOptionsItemSelected(item)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="#000"
|
||||||
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="#FF000000" android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
|
<path android:fillColor="#000" android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
|
||||||
</vector>
|
</vector>
|
|
@ -4,6 +4,6 @@
|
||||||
android:viewportWidth="24.0"
|
android:viewportWidth="24.0"
|
||||||
android:viewportHeight="24.0">
|
android:viewportHeight="24.0">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#ffffff"
|
android:fillColor="#000"
|
||||||
android:pathData="M8,5v14l11,-7z"/>
|
android:pathData="M8,5v14l11,-7z"/>
|
||||||
</vector>
|
</vector>
|
|
@ -1,68 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<android.support.constraint.ConstraintLayout 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">
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/pause"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
android:text="pause"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/seekBar"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent" />
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/play"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
android:text="play"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/seekBar"
|
|
||||||
app:layout_constraintStart_toStartOf="parent" />
|
|
||||||
|
|
||||||
<SeekBar
|
|
||||||
android:id="@+id/seekBar"
|
|
||||||
style="@style/Widget.AppCompat.SeekBar.Discrete"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:layout_marginBottom="4dp"
|
|
||||||
android:max="200"
|
|
||||||
android:progress="10"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/imageView2"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/play"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/imageView"
|
|
||||||
app:srcCompat="@android:color/transparent" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/imageView"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/imageView2"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:srcCompat="@android:color/transparent" />
|
|
||||||
|
|
||||||
</android.support.constraint.ConstraintLayout>
|
|
|
@ -1,24 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<android.support.constraint.ConstraintLayout 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:id="@+id/constraint"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="#323232"
|
|
||||||
tools:context=".Main2Activity">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/imageView3"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:srcCompat="@android:color/transparent" />
|
|
||||||
</android.support.constraint.ConstraintLayout>
|
|
|
@ -3,9 +3,31 @@
|
||||||
<!-- Base application theme. -->
|
<!-- Base application theme. -->
|
||||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||||
<!-- Customize your theme here. -->
|
<!-- Customize your theme here. -->
|
||||||
<item name="colorPrimary">#ff00</item>
|
<item name="colorPrimary">#000</item>
|
||||||
<item name="colorPrimaryDark">#0000ff</item>
|
<item name="colorPrimaryDark">#000</item>
|
||||||
<item name="colorAccent">#ff00</item>
|
<item name="colorAccent">#fff</item>
|
||||||
|
<item name="windowActionBar">false</item>
|
||||||
|
<item name="windowNoTitle">true</item>
|
||||||
|
<item name="android:textColorPrimary">#ffffff</item>
|
||||||
|
<item name="actionMenuTextColor">#fff</item>
|
||||||
|
<item name="android:itemBackground">#000</item>
|
||||||
|
<item name="android:textColorSecondary">#fff</item>
|
||||||
|
<item name="android:colorEdgeEffect">#fff</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme.SeekBar" parent="Widget.AppCompat.SeekBar">
|
||||||
|
<item name="android:progressBackgroundTint">#999999</item>
|
||||||
|
<item name="android:progressTint">#fff</item>
|
||||||
|
<item name="android:colorControlActivated">#fff</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme.DarkDialog" parent="Theme.AppCompat.Dialog.Alert">
|
||||||
|
<!-- Used for the buttons -->
|
||||||
|
<item name="colorAccent">#fff</item>
|
||||||
|
<!-- Used for the title and text -->
|
||||||
|
<item name="android:textColorPrimary">#FFFFFF</item>
|
||||||
|
<!-- Used for the background -->
|
||||||
|
<item name="android:background">#000</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
package oupson.apngcreator
|
package oupson.apngcreator
|
||||||
|
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
import org.junit.Assert.*
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Example local unit test, which will execute on the development machine (host).
|
* Example local unit test, which will execute on the development machine (host).
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.3.11'
|
ext.kotlin_version = '1.3.31'
|
||||||
ext.anko_version = '0.10.8'
|
ext.anko_version = '0.10.8'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.2.1'
|
classpath 'com.android.tools.build:gradle:3.4.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
|
|
|
@ -10,4 +10,4 @@ org.gradle.jvmargs=-Xmx1536m
|
||||||
# When configured, Gradle will run in incubating parallel mode.
|
# When configured, Gradle will run in incubating parallel mode.
|
||||||
# This option should only be used with decoupled projects. More details, visit
|
# This option should only be used with decoupled projects. More details, visit
|
||||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||||
# org.gradle.parallel=true
|
# org.gradle.parallel=true
|
|
@ -1,6 +1,6 @@
|
||||||
#Tue Sep 25 21:36:02 CEST 2018
|
#Fri May 17 18:01:19 CEST 2019
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
|
||||||
|
|
Loading…
Reference in New Issue