Backup before switching to androidx

This commit is contained in:
oupson 2019-05-17 18:17:47 +02:00
parent fb764591be
commit 5235a6b3a4
20 changed files with 284 additions and 280 deletions

View File

@ -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>

4
.idea/encodings.xml Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
</project>

View File

@ -1,11 +1,12 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 27
compileSdkVersion 28
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
targetSdkVersion 28
versionCode 1
versionName "1.0.9"
@ -22,16 +23,15 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
productFlavors {
}
}
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'
androidTestImplementation 'com.android.support.test:runner:1.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"
}

View File

@ -111,8 +111,8 @@ class APNGDisassembler {
throw BadApng("`y_offset` + `height` must be <= `IHDR` height")
}
png!!.addAll(pngSignature.toList())
png!!.addAll(generateIhdr(ihdr, width, height).toList())
png?.addAll(pngSignature.toList())
png?.addAll(generateIhdr(ihdr, width, height).toList())
plte?.let {
png!!.addAll(it.toList())
}

View File

@ -147,8 +147,8 @@ class Apng {
res.addAll(generateACTL())
// Get max height and max width
val maxHeight = frames.sortedByDescending { it.height }[0].height
val maxWitdh = frames.sortedByDescending { it.width }[0].width
maxHeight = frames.sortedByDescending { it.height }[0].height
maxWidth = frames.sortedByDescending { it.width }[0].width
if (cover == null) {
val framesByte = ArrayList<Byte>()
@ -171,24 +171,8 @@ class Apng {
fcTL.addAll(to4Bytes(frames[0].width).toList())
fcTL.addAll(to4Bytes(frames[0].height).toList())
// Calculate offset
if (frames[0].x_offsets == null) {
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())
}
fcTL.addAll(to4Bytes(frames[0].x_offsets).toList())
fcTL.addAll(to4Bytes(frames[0].y_offsets).toList())
// Set frame delay
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].height).toList())
// Calculate offset
if (frames[0].x_offsets == null) {
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())
}
fcTL.addAll(to4Bytes(frames[0].x_offsets).toList())
fcTL.addAll(to4Bytes(frames[0].y_offsets).toList())
// Set frame delay
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].height).toList())
if (frames[i].x_offsets == null) {
if (frames[i].width < maxWitdh) {
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())
}
fcTL.addAll(to4Bytes(frames[i].x_offsets).toList())
fcTL.addAll(to4Bytes(frames[i].y_offsets).toList())
// Set frame delay
fcTL.addAll(to2Bytes(frames[i].delay.toInt()).toList())
@ -504,9 +458,9 @@ class Apng {
val pnn = PnnQuantizer(btm)
val btmOptimised = pnn.convert(maxColor, false)
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 {
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
@ -520,6 +474,7 @@ class Apng {
it.maxHeight = maxHeight
}
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) {
val diffCalculator = BitmapDiffCalculator(drawedFrame[i - 1], drawedFrame[i])
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "frame$i.png").writeBytes(PngEncoder.encode(diffCalculator.res, true))

View File

@ -5,11 +5,11 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 27
compileSdkVersion 28
defaultConfig {
applicationId "oupson.apngcreator"
minSdkVersion 24
targetSdkVersion 26
targetSdkVersion 28
versionCode 1
versionName "1.0"
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 "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
implementation "org.jetbrains.anko:anko-design:$anko_version"
implementation "org.jetbrains.anko:anko-constraint-layout:$anko_version"
}
kotlin {
experimental {

View File

@ -2,12 +2,10 @@ package oupson.apngcreator
import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*

View File

@ -2,14 +2,19 @@ package oupson.apngcreator
import android.app.Activity
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Color
import android.os.Bundle
import android.os.Environment
import android.support.design.widget.FloatingActionButton
import android.support.v7.app.AppCompatActivity
import android.text.Html
import android.view.View
import android.widget.ListView
import org.jetbrains.anko.*
import org.jetbrains.anko.design.appBarLayout
import org.jetbrains.anko.design.floatingActionButton
import org.jetbrains.anko.sdk27.coroutines.onClick
import oupson.apng.Apng
@ -22,6 +27,7 @@ class CreatorActivity : AppCompatActivity() {
var bitmapAdapter : AnkoAdapter<Bitmap>? = null
val PICK_IMAGE = 999
var view = CreatorActivityLayout()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
view.setContentView(this)
@ -38,7 +44,7 @@ class CreatorActivity : AppCompatActivity() {
startActivityForResult(chooserIntent, PICK_IMAGE)
}
view.createButton.onClick {
var apngCreated = Apng()
val apngCreated = Apng()
items.forEach { bitmap ->
apngCreated.addFrames(bitmap)
@ -54,23 +60,16 @@ class CreatorActivity : AppCompatActivity() {
a.load(apngCreated.toByteArray())
a.onLoaded { anim ->
alert {
customView {
imageView {
/**anim.anim?.let {cu ->
for (i in 0 until cu.numberOfFrames) {
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)
}
customView {
ctx.setTheme(R.style.AppTheme_DarkDialog)
imageView {
this.setImageDrawable(anim.anim)
}
}.show()
}
}
}.show()
}
}
bitmapAdapter = AnkoAdapter({items}) {index, items, view ->
with(items[index]) {
verticalLayout {
@ -112,13 +111,39 @@ class CreatorActivityLayout : AnkoComponent<CreatorActivity> {
override fun createView(ui: AnkoContext<CreatorActivity>) = with(ui) {
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 {
id = View.generateViewId()
}.lparams {
width = matchParent
height = matchParent
below(bar)
}
addFrameButton = floatingActionButton {
imageResource = R.drawable.ic_add_white_24dp
imageResource = R.drawable.ic_add_black_24dp
backgroundTintList = ColorStateList.valueOf(Color.WHITE)
isClickable = true
}.lparams {
width = wrapContent
@ -128,7 +153,8 @@ class CreatorActivityLayout : AnkoComponent<CreatorActivity> {
alignParentEnd()
}
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
}.lparams {
width = wrapContent

View File

@ -2,21 +2,35 @@ package oupson.apngcreator
import android.Manifest
import android.content.pm.PackageManager
import android.graphics.Color
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.support.v7.app.AppCompatActivity
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.verticalLayout
import oupson.apng.ApngAnimator
class Main2Activity : AppCompatActivity() {
lateinit var imageView : ImageView
override fun onCreate(savedInstanceState: Bundle?) {
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
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
@ -38,10 +52,10 @@ class Main2Activity : AppCompatActivity() {
}
fun load() {
val animator = ApngAnimator(applicationContext).loadInto(imageView3)
val animator = ApngAnimator(applicationContext).loadInto(imageView)
val uri = intent.data
animator.load(uri, null)
imageView3.onClick {
imageView.onClick {
try {
if (animator.isPlaying) {
animator.pause()

View File

@ -1,75 +1,181 @@
package oupson.apngcreator
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.os.Bundle
import android.support.constraint.ConstraintLayout
import android.support.v7.app.AppCompatActivity
import android.text.Html
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.widget.SeekBar
import android.view.View
import android.widget.Toolbar
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
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 = "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 = "https://raw.githubusercontent.com/tinify/iMessage-Panda-sticker/master/StickerPackExtension/Stickers.xcstickers/Sticker%20Pack.stickerpack/panda.sticker/panda.png"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
animator = ApngAnimator(this).loadInto(imageView).apply {
load(imageUrl)
onLoaded {
setOnAnimationLoopListener {
// Log.e("app-test", "onLoop")
val buttonDrawable = GradientDrawable().apply {
shape = GradientDrawable.RECTANGLE
cornerRadius = dip(5).toFloat()
setStroke(2, Color.WHITE)
}
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)
}
}

View File

@ -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: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>

View File

@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#ffffff"
android:fillColor="#000"
android:pathData="M8,5v14l11,-7z"/>
</vector>

View File

@ -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>

View File

@ -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>

View File

@ -3,9 +3,31 @@
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#ff00</item>
<item name="colorPrimaryDark">#0000ff</item>
<item name="colorAccent">#ff00</item>
<item name="colorPrimary">#000</item>
<item name="colorPrimaryDark">#000</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>
</resources>

View File

@ -1,9 +1,8 @@
package oupson.apngcreator
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*

View File

@ -1,14 +1,14 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.11'
ext.kotlin_version = '1.3.31'
ext.anko_version = '0.10.8'
repositories {
google()
jcenter()
}
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"
// NOTE: Do not place your application dependencies here; they belong

View File

@ -1,6 +1,6 @@
#Tue Sep 25 21:36:02 CEST 2018
#Fri May 17 18:01:19 CEST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
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